2012-10-22 71 views
1

我想從一個大字符串匹配一個字符串。在PHP的preg匹配抓住整個字符串?

例如

「敏捷的棕色狐狸是在這裏,但敏捷的棕色狐狸總是在那裏太」

preg_match('(quick brown fox(.+?)too)',$txt,$match) 

的問題是,它抓住了整個句子,而不是「敏捷的棕色狐狸總是在那裏太」

如何抓住唯一的第二部分?..這種情況發生時,也有類似的串在一起在一行中左右...

回答

1

你^ h大街2在這裏捕捉羣體。你$match數組將包含..

[0] => quick brown fox is here but quick brown fox always over there too 
[1] => quick brown fox is here but quick brown fox always over there too 
[2] => is here but quick brown fox always over there 

而且,你錯過了這兩個前鋒在您的正則斜槓。

+0

是的,但你幾乎可以使用任何你想要的修飾符。 –

+1

實際上,周圍的'()'作爲分隔符,它們不是一個捕獲組。 – deceze

+1

@F.Müller不,'+?'是* +的非貪婪*版本。 – deceze

1

非greedyness是在圖案年底僅適用於(實際上,這意味着,如果prce找到匹配,也不會去尋找一個更大的比賽,剛剛返回),所以:

「快速的棕色狐狸也在這裏,始終在那裏太」

preg_match('(quick brown fox(.+?)too)', $txt, $match) 

將只匹配「敏捷的棕色狐狸也在這裏」 - 但沒有,你在找什麼。

也許你可以扭轉你的$ txt與strrev() &寫一個顛倒的模式,而不是顛倒你的匹配,但它只會解決這個具體問題。

+0

該代碼返回整個句子,而不是最後一個匹配的部分..我試圖確切的第二部分..以某種方式忽略第一場比賽 –