我有一行文字看起來像「... X ... Y ...」,其中X和Y都是Ok,Empty或Open。使用PHP,我試圖使用preg_match()來找出每一個是什麼。正則表達式PHP中的管道問題
然而,在X是「空」,而Y是「OK」的情況下,以下行給了我兩場比賽:「空」和「空」。
這個正則表達式有什麼問題?
謝謝!
我有一行文字看起來像「... X ... Y ...」,其中X和Y都是Ok,Empty或Open。使用PHP,我試圖使用preg_match()來找出每一個是什麼。正則表達式PHP中的管道問題
然而,在X是「空」,而Y是「OK」的情況下,以下行給了我兩場比賽:「空」和「空」。
這個正則表達式有什麼問題?
謝謝!
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);
?>
第一個槽將包含所有匹配的字符串,第二個槽將包含每個這些字符串的第一個捕獲組。
資源:
您需要使用preg_match_all()
才能獲得多個結果。典型的匹配陣列構成是這樣的:
array(
'Empty', // whole match
'Empty' // match group 1
)
你只比較第一確定,打開或空的,但既然你用一根火柴組,它出現了兩次。