【问题标题】:Regex and BBCodes正则表达式和 BBCode
【发布时间】:2011-04-26 18:53:57
【问题描述】:

过去我使用 bbcodes 或 regex 的次数不多,但我找到了一些教程,帮助我找出了基本的方法。我想使用某种方法,所以我结合了那些教程中的一些方法来得到我想要的。唯一的问题是它不起作用。我收到一条错误消息,提示“编译失败:偏移量 11 处的括号不匹配”我不知道偏移量 11 是什么意思,并且我检查了所有括号并且没有未闭合的集合。这是我的代码:

function bbParse($string){

 $codes = 数组(
        '/\[b\](.+?)\[\/b\]/' => '$1',
        '/\[h2\](.+?)\[\/h2\]/' => '

$1

', '/\[h3\](.+?)\[\/h3\]/' => '

$1

', '/\[p\](.+?)\[\/p\]/' => '

$1

', '/\[quote\](.+?)\[\/quote\]/' => '
$1
', '/\[img\](.+?)\[\/img\]/' => '', '/\[url=\(.+?)\](.+?)\[\/url\]/' => '$2' ); $string = preg_replace(array_keys($codes), array_values($codes), $string); 返回$字符串; }

【问题讨论】:

  • 您已经提出了 9 个问题,但没有被接受的答案。不会给任何人提供帮助的动力。只是想我会指出这一点。

标签: php regex bbcode


【解决方案1】:

/\[url=\(.+?)\](.+?)\[\/url\]/

此正则表达式中的第一个分组括号被转义,使其成为文字括号字符。因此,关闭的没有匹配的开头paren。您需要删除第一个括号前的\,使其如下:

/\[url=(.+?)\](.+?)\[\/url\]/

【讨论】:

    【解决方案2】:

    似乎最后一个条目是罪魁祸首。开头的父级用反斜杠转义,这可能不是您想要的。

    【讨论】:

      【解决方案3】:

      在这里你转义了一个(,所以它失败了,因为没有( 到下一个)

      '/\[url=\(.+?)\](.+?)\[\/url\]/' => '<a href=\'$1\'>$2</a>'
      

      【讨论】: