所以,对于基本的东西,我的正则表达式工作正常。
例如
[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);
答案 0 :(得分:1)
使用\[(/?b)\]
并将其替换为<$1>
答案 1 :(得分:1)
只要您愿意相当愚蠢,您就可以使用正则表达式轻松完成此操作:不要担心找到匹配的对,只需替换任何看起来像开始或结束标记的内容:
$str = preg_replace("|\[(/?\w+)\]|iS", "<$1>", $str);
如果这样的事情不够好,那么正则表达式不是你的解决方案。它无法正确处理嵌套元素,因为它不是真正的解析器。
有一个PHP extension for parsing BBCode。如果你对强大,正确的解析感兴趣,那可能就是你想要的方法(警告:我自己没有使用它)。