preg_match_all не работает

Что не так в следующем регулярном выражении?

$source =
"Je (1200) recycler(s) hebben een totale opslagcapaciteit van 24.000.000. 
In het bestemmingsveld [2:188:7] zweven 0 metaal en 5.000 kristal in de ruimte. 
Je hebt 0 metaal en 5.000 kristal opgehaald."


echo $source;
$regex  = 'Je \(([0-9.]*?)\) recycler(s) hebben een totale opslagcapaciteit van ([0-9.]*?). ';
$regex .= 'In het bestemmingsveld \[2:188:7\] zweven ([0-9.]*?) metaal en ([0-9.]*?) kristal in de ruimte. ';
$regex .= 'Je hebt ([0-9.]*?) metaal en ([0-9.]*?) kristal opgehaald.';

$matches = array();

preg_match_all('/' . $regex . '/i', $source, $matches, PREG_SET_ORDER);

print_r($matches);

person Patrick Rennings    schedule 10.01.2012    source источник
comment
Ваш ввод на несколько строк, как в примере? Кроме того, ваши цифры должны быть захвачены с помощью [0-9]+(?:\.[0-9]+)*, а не [0-9].*?_   -  person fge    schedule 10.01.2012
comment
Что вы ожидаете от него? Вы получаете сообщения об ошибках?   -  person Paul Dessert    schedule 10.01.2012
comment
Я думаю, что вам - хотя бы с одной стороны - нужно избегать периодов в некоторых группах. ([0-9.]*?) должно быть ([0-9\.]*?) -- В противном случае точка собирает все символы, и тогда действительно нет смысла иметь 0-9 (если в этом смысл, что я предполагаю, что это не так)   -  person Jens    schedule 10.01.2012
comment
@MarkHünermundJensen, нет, . внутри набора символов соответствует только буквальному '.'.   -  person Bart Kiers    schedule 10.01.2012
comment
@BartKiers Моя ошибка - спасибо, что указали на это   -  person Jens    schedule 11.01.2012


Ответы (2)


скобки в recycler(s) нуждаются в обратной косой черте. попробуй: recycler\(s\)

person MrGlass    schedule 10.01.2012

Je \(([0-9.]*?)\) recycler\(s\) hebben een totale opslagcapaciteit van ([0-9.]*?)\s+
\s+In het bestemmingsveld \[2:188:7\] zweven ([0-9.]*?) metaal en ([0-9.]*?) kristal in de ruimte.\s+
\s+Je hebt ([0-9.]*?) metaal en ([0-9.]*?) kristal opgehaald.

Я цитирую параны в переработчике (ах), добавляю несколько \s+ до и после новых строк и добавляю модификатор 's' к совпадению с регулярным выражением.

person atxdba    schedule 10.01.2012