2012-01-10 56 views
0

以下正则表达式有什么问题?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); 
+0

是您的上几行输入像在这个例子中一样?另外,你的数字应该用'[0-9] +(?:\。[0-9] +)*',而不是'[0-9]。*?'_ – fge 2012-01-10 19:52:09

+0

你应该用什么来期待它呢? ?你是否收到任何错误讯息? – 2012-01-10 19:52:32

+0

我认为你 - 至少在一件事情上 - 需要避开一些团体的时期。 ([0-9。] *?)应该是([0-9 \。] *?) - 点否则收集所有字符,然后0-9没有意义(如果那是点,我认为它不是) – 2012-01-10 19:54:20

回答

1

recycler(s)的圆括号需要反斜杠。尝试:recycler\(s\)

0
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. 

我引述parans中回收(S),增加了一些\ S +前和新生产线后,并增加了“S”修饰符的正则表达式匹配