【问题标题】:Preg_replace issue bbcodePreg_replace 问题 bbcode
【发布时间】:2012-08-24 13:31:24
【问题描述】:

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

【问题讨论】:

    标签: php preg-replace bbcode


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 太棒了!我总是觉得这些东西太难用了:P 但至少它们比 eregi_replace 的要好。
    • 很好,我处理这些的方式是将我的搜索字符串输入到RegExr 并通过表达式的每个部分进行处理。如果你一次调试完整的表达式,它几乎变成了一个猜谜游戏。有很多类似的工具here,如果你不想使用 RegExr。
    • 太棒了,从来不知道它的存在!
    猜你喜欢
    • 2011-09-07
    • 2012-04-01
    • 2011-06-21
    • 2011-11-29
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多