PHP - 匹配文本中所有存在的短语 - preg_replace

时间:2015-12-15 13:22:17

标签: php

这是我的文字:

$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 个答案:

答案 0 :(得分:1)

只需移除?之后的.*即可消除模式的懒惰。

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

正则表达式中的懒惰是什么?

.*.+等模式通常贪婪,这意味着他们会尽可能地尝试匹配。在它之后添加额外?我们告诉它变为懒惰,因此它只需要最近/最短的匹配。因此,如果你删除它,它将以正常方式工作。

注意:?的其他用途是使前一项可选,但这不是这种情况,因为通过使用*,您已经使该部分成为可选项。

从此处了解详情:http://www.regular-expressions.info/repeat.html