Preg_replace问题bbcode

时间:2012-08-29 20:58:01

标签: php preg-replace bbcode

我有一个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);

1 个答案:

答案 0 :(得分:1)

好的,考虑到你的示例bbcode让它变得有点困难,经过一些测试,这就是我想出的:

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

关于此问题的小说明:正如您在代码之间给出[text]的示例,我使用(.*?)来匹配其中的内容。如果您不需要在代码之间支持方括号,则可能需要更改此内容。

正如您可能看到的,我在使用正则表达式时已经拥有了自己的习惯。首先,我总是使用/作为分隔符,因为我认为使用此代码可以更轻松地转义字符。其次,我使用美元符号进行比赛,保持简单,不要有太多的斜线。