2013-06-28 64 views
1

奇怪的事情我有此數組:PHP - 簡單的preg_replace

'@(.*?)<div>(.*?)</div>(.*?)@i' => 'ok' 

,我使用了preg_replace從一些字符串返回值「OK」。

問題是,當我做preg_replace時,最後的(.*?)未被「檢測到」。

我有字符串:test1<div>test2</div>test3

有了這樣的陣列和preg_replace函數,它將返回oktest3。爲什麼不更換test3?

回答

4

問題是,.*?是一個非貪婪的匹配,因此儘量少匹配。

如果你想讓它從一開始就與字符串的結尾相匹配,使用^ and $的正則表達式錨定到開頭和結尾,就像這樣:

'@^(.*?)<div>(.*?)</div>(.*?)[email protected]' => 'ok' 
+0

真棒,你從哪得知?解決了我的問題。 –

+0

@AfonsoMatos:樂於助人。記住接受我的答案,如果你覺得它解決了你的問題。我可以推薦查看http://regular-expressions.info - 這是一個很好的信息來源。 –

+0

好的,thx爲網站。我還沒有接受,因爲我得到了一些錯誤告訴我在6分鐘內嘗試.. –