2011-12-21 205 views
2

剥离的BBcode下面的函数正则表达式从字符串

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

返回一个错误:

Unknown modifier 

一些隐蔽字符看起来像SOH在记事本++,但有一个黑色的背景。真奇怪。

+0

你想删除标签(并保留其内容)吗?这种BBCode的风味是否允许嵌套标签? (例如,许多BBCode解析器允许'[quote]'标记嵌套)。如果是这样,您的解决方案将需要更复杂一点。现在您拥有的嵌套标签无法正常工作。 – ridgerunner 2011-12-21 17:06:54

回答

2

如何:

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

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

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

0

那么,你的分隔符是/和你结束分隔符后的字符串\1\]/,但既不\1还是其他字符是有效的改性剂。

选择一个不同的分隔符,或者简单地在表达式中将其全部出现。