我有一个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);
答案 0 :(得分:1)
好的,考虑到你的示例bbcode让它变得有点困难,经过一些测试,这就是我想出的:
preg_replace( '/\[size=([^\]\:]+)\:([^\]]+)\](.*?)\[\/size\:([^\]]+)\]/is', '<font size="$1%">$3</font>', $text);
关于此问题的小说明:正如您在代码之间给出[text]
的示例,我使用(.*?)
来匹配其中的内容。如果您不需要在代码之间支持方括号,则可能需要更改此内容。
正如您可能看到的,我在使用正则表达式时已经拥有了自己的习惯。首先,我总是使用/
作为分隔符,因为我认为使用此代码可以更轻松地转义字符。其次,我使用美元符号进行比赛,保持简单,不要有太多的斜线。