php
2015-12-15 48 views 4 likes 
4

這裏是我的文字:PHP - 匹配所有存在於文本短語 - 的preg_replace

$msg_text = '[quote]TEXT[/quote]'; 

和我的preg_replace:

$msg_text = preg_replace('#\[quote\](.*?)\[\/quote\]#is', '"$1"'."\r\n", $msg_text); 

,它工作正常。但是當我的文字看起來像這樣:

$msg_text = '[quote]TEXT [quote]TEXT[/quote][/quote]'; 

??我的preg_replace在這個例子中不起作用。我如何在所有情況下重新顯示此文本?

回答

1

只需卸下?.*這將刪除你的模式的懶惰。

'#\[quote\](.*)\[\/quote\]#is' 

什麼是正則表達式中的懶惰?

模式,如.*.+正常貪婪,這意味着他們將嘗試,只要他們能匹配。把一個額外的?後,我們告訴它成爲,所以將只需要就近/最短匹配。所以,如果你刪除它,它將以正常的方式工作。

注意:?的其他用途是使前一項是可選的,但這裏不是這種情況,因爲通過使用*您已使該零件已經可選。

瞭解更多來自這裏:http://www.regular-expressions.info/repeat.html

+1

不會移除'''做了[quote]富了[/ quote] ... [報價]酒吧了[/ quote]' - >'富了[/ quote? ] ... [報價] bar'? – kero

+0

@kingkero如何?我不明白你的意思你能再澄清一點嗎? –

+0

參見[你](https://regex101.com/r/pC7jJ4/1)和[有機磷農藥(https://regex101.com/r/pC7jJ4/2) – kero

相關問題