RegEx从字符串中剥离BBcode

时间:2011-12-21 13:24:26

标签: php regex

以下功能

function stripbbtags ($string) {
    $pattern = "/\[([^\]]+?)(=[^\]]+?)?\](.+?)\[/\1\]/";
    $replace = "";
    return preg_replace($pattern, $replace, $string);
}

返回错误:

Unknown modifier

有一些神秘的角色,在Notepad ++中看起来像SOH但是有黑色背景。真的很奇怪。

2 个答案:

答案 0 :(得分:2)

这个怎么样:

function stripbbtags ($string) {
    $pattern = "#\[([^\]]+?)(=[^\]]+?)?\](.+?)\[/\1\]#";
    $replace = "";
    return preg_replace($pattern, $replace, $string);
}

错误信息有点神秘,但实际上会给你一些见解,如果看一下preg_replace的文档,你会发现它们会谈论修饰符。这些修饰符用于将选项传递给PCRE库,即做一些不区分大小写的匹配,字符串是unicode等。

问题依赖于您用作分隔符的字符;您正在使用/并且正则表达式包含斜杠,因此PCRE认为\1\]/是您的修饰符。将分隔符更改为#可解决问题。

答案 1 :(得分:0)

好吧,你的分隔符是/,而你的结束分隔符是字符串\1\]/,但\1和其他字符都不是有效的修饰符。

选择一个不同的分隔符,或者只是在表达式中转义所有出现的分隔符。