2012-01-10 50 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」修飾符的正則表達式匹配