0

我的 preg_replace 函数有问题,我正在尝试将一些 bbcode 转换为 HTML,但它不起作用。我要开始工作的是[size=200:37pfziz0][TEXT][/size:37pfziz0] (不知道为什么这些数字会出现在那里,但需要考虑它们。所以我正在尝试做[size=(1):(2)](3)[/size:(4)]

我用eregi和preg都试过了,但似乎都不起作用:

$txt = eregi_replace("\\[size=([^\\[]+):([^\\[]+)\\]([^\\[]*)\\[/size:([^\\[]+)\\]", "<font size=\"\\1\%\">\\3</font>", $txt);
$txt = preg_replace("#\[size\=(.*?):(.*?)\](.*?)\[/size:(.*?)\]#is", "<font size=\"\\1\%\">\\3</font>", $txt);

谁能告诉我我做错了什么?我花了大约一个小时做报价,最终使用这种方法得到了很好的结果:

$txt = preg_replace("#\[quote\=(.*?):(.*?)\](.*?)\[/quote:(.*?)\]#is", "<blockquote>Quote by: \\1<br/>\\3</blockquote>", $txt);
4

1 回答 1

1

好的,考虑到您的示例 bbcode 有点困难,经过一番测试,这就是我想出的:

preg_replace( '/\[size=([^\]\:]+)\:([^\]]+)\](.*?)\[\/size\:([^\]]+)\]/is', '<font size="$1%">$3</font>', $text);

关于这一点的小提示:正如您[text]在代码之间给出的示例一样,我用来(.*?)匹配两者之间的内容。如果您不需要在标签之间支持方括号,您可能需要更改此设置。

正如您可能看到的,我在使用正则表达式时有自己的习惯。首先,我总是将/其用作分隔符,因为我认为转义字符会更容易一些。其次,我使用美元符号进行匹配,以保持简单,并且没有太多的斜线。

于 2012-08-29T21:21:08.367 回答