2010-09-11 55 views
1

我有一行文字看起來像「... X ... Y ...」,其中X和Y都是Ok,Empty或Open。使用PHP,我試圖使用preg_match()來找出每一個是什麼。正則表達式PHP中的管道問題

然而,在X是「空」,而Y是「OK」的情況下,以下行給了我兩場比賽:「空」和「空」。

這個正則表達式有什麼問題?

謝謝!

回答

2

preg_match()只做一個匹配,第一個找到。在你的情況下,第一個是「空的」。

preg_match()返回的數組包含與第一個插槽$matches[0]中的整個正則表達式匹配的文本。 對於每個組(括號),$matches的下一個插槽將包含捕獲的內容。在你的情況下,你有一個組,包含「空」。

其結果將是$matches[0] == "Empty"$matches[1] == "Empty"


要捕獲你的正則表達式,你必須使用preg_match_all()方法匹配的一切。

<?php 

$match = "test Open test Empty test"; 

$regex = '/(Ok|Open|Empty)/'; 
preg_match_all($regex, $match, $matches); 
print_r($matches); 

?> 

第一個槽將包含所有匹配的字符串,第二個槽將包含每個這些字符串的第一個捕獲組。

The code on ideone


資源:

0

您需要使用preg_match_all()才能獲得多個結果。典型的匹配陣列構成是這樣的:

array(
    'Empty', // whole match 
    'Empty' // match group 1 
) 

你只比較第一確定,打開或空的,但既然你用一根火柴組,它出現了兩次。