这是我的文字:
$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不适用于此示例。如何在所有情况下重新发布此文本?
答案 0 :(得分:1)
只需移除?
之后的.*
即可消除模式的懒惰。
'#\[quote\](.*)\[\/quote\]#is'
正则表达式中的懒惰是什么?
.*
和.+
等模式通常贪婪,这意味着他们会尽可能地尝试匹配。在它之后添加额外?
我们告诉它变为懒惰,因此它只需要最近/最短的匹配。因此,如果你删除它,它将以正常方式工作。
注意:?
的其他用途是使前一项可选,但这不是这种情况,因为通过使用*
,您已经使该部分成为可选项。