BBC代码的正则表达式,如果BB代码本身就不能正常工作(PHP)

时间:2012-12-13 14:23:45

标签: php regex bbcode

所以,对于基本的东西,我的正则表达式工作正常。

例如

[b]text[/b]变为<b>text</b>

[b]te[b]x[/b]t[/b]变为<b>te[b]x</b>t[/b] 理想情况下我想要它:<b>te<b>x</b>t</b>

如果我使用不同的bbcode,它可以工作:

[b]te[i]x[/i]t[/b]变为<b>te<i>x</i>t</b>

这是一个问题的原因,是因为我有一个引用bbcode,有时人们最终会引用某人的帖子,这本身就引用了其他人。

正则表达式看起来像这样:

$str = preg_replace("/\[b\](.*?)\[\/b\]/misS", "<b>$1</b>", $str);

2 个答案:

答案 0 :(得分:1)

使用\[(/?b)\]并将其替换为<$1>

答案 1 :(得分:1)

只要您愿意相当愚蠢,您就可以使用正则表达式轻松完成此操作:不要担心找到匹配的对,只需替换任何看起来像开始或结束标记的内容:

$str = preg_replace("|\[(/?\w+)\]|iS", "<$1>", $str);

如果这样的事情不够好,那么正则表达式不是你的解决方案。它无法正确处理嵌套元素,因为它不是真正的解析器。

有一个PHP extension for parsing BBCode。如果你对强大,正确的解析感兴趣,那可能就是你想要的方法(警告:我自己没有使用它)。