0

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

例如

[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);
4

2 回答 2

1

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

于 2012-12-13T14:29:15.863 回答
1

只要您愿意变得相当愚蠢,您就可以使用正则表达式轻松地做到这一点:不要担心找到匹配的对,只需替换任何看起来像开始或结束标签的东西:

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

如果这样的东西还不够好,那么正则表达式不是您的解决方案。它不能正确处理嵌套元素,因为它不是真正的解析器。

有一个用于解析 BBCode 的 PHP 扩展。如果您对健壮、正确的解析感兴趣,这可能是您要走的路(警告:我自己没有使用过)。

于 2012-12-13T14:30:49.643 回答