过去我没有使用过bbcodes或regex,但我找到了一些帮助我找出基本方法的教程。我想使用某种方法,所以我结合了这些教程中的一些方法来获得我想要的东西。唯一的问题是它不起作用。我得到一个错误,说“编译失败:在偏移11处无法匹配的括号”我不知道偏移11意味着什么,我已经检查了所有括号,并且没有未关闭的集合。这是我的代码:
function bbParse($string){
$codes = array(
'/\[b\](.+?)\[\/b\]/' => '<b>$1</b>',
'/\[h2\](.+?)\[\/h2\]/' => '<h2>$1</h2>',
'/\[h3\](.+?)\[\/h3\]/' => '<h3>$1</h3>',
'/\[p\](.+?)\[\/p\]/' => '<p>$1</p>',
'/\[quote\](.+?)\[\/quote\]/' => '<blockquote>$1</blockquote>',
'/\[img\](.+?)\[\/img\]/' => '<img src=\'$1\' alt=\'Image Not Available\'>',
'/\[url=\(.+?)\](.+?)\[\/url\]/' => '<a href=\'$1\'>$2</a>'
);
$string = preg_replace(array_keys($codes), array_values($codes), $string);
return $string;
}</code>
答案 0 :(得分:3)
/\[url=\(.+?)\](.+?)\[\/url\]/
此正则表达式中的第一个分组paren被转义,使其成为字面括号字符。因此,收盘时没有匹配的开盘。您需要删除第一个括号前面的\
,使其成为:
/\[url=(.+?)\](.+?)\[\/url\]/
答案 1 :(得分:1)
看来最后一个条目是罪魁祸首。开头的父母用反斜杠转义,这可能不是你想要的。
答案 2 :(得分:1)
您在此处转义(
,因此失败,因为下一个(
没有)
:
'/\[url=\(.+?)\](.+?)\[\/url\]/' => '<a href=\'$1\'>$2</a>'