我想编写symple(包含一个preg_replace调用)论坛分析器,我遇到嵌套标签的问题。PHP PCRE - 正确的嵌套标签行为
例如如果有人引用某人的话,我就无法达到正确的行为。
当具有:
[quote=Tom]
[quote=Jerry]
Lorem
[/quote]
Ipsum
[/quote]
Dolor.
我想是这样的:
<blockquote>
<p><strong>Tom wrote</strong></p>
<blockquote>
<p><strong>Jerry wrote:</strong></p>
<p>Lorem</p>
</blockquote>
Ipsum
</blockquote>
Dolor.
我有这样的代码:
preg_replace('~\[quote (.+)\](.+)\[/quote\]~is', '<blockquote><p><strong>$1</strong> wrote:</p><p>$2</p></blockquote>', $value);
这个版本是贪婪。如果我有两个独立的块,则正则表达式会覆盖第一个[quote]
和第二个[/quote]
之间的所有文本。
如果我添加了U
改性剂,它太ungreedy - 第一[quote]
标签与第一(嵌套和不相关)[/quote]
标签配对。
感谢您的帮助!
您可能需要查看递归正则表达式,它可以处理该问题,或者实际使用/创建解析器,而不是仅依赖于正则表达式。 – Orbling 2011-02-24 16:05:04
嗨,giyf:http://stackoverflow.com/questions/2909588/regex-bbcode-perfecting-nested-quote – soju 2011-02-24 16:07:45