正则表达式从字符串
问题描述:
剥离的BBcode下面的函数正则表达式从字符串
function stripbbtags ($string) {
$pattern = "/\[([^\]]+?)(=[^\]]+?)?\](.+?)\[/\1\]/";
$replace = "";
return preg_replace($pattern, $replace, $string);
}
返回一个错误:
Unknown modifier
一些隐蔽字符看起来像SOH在记事本++,但有一个黑色的背景。真奇怪。
答
如何:
function stripbbtags ($string) {
$pattern = "#\[([^\]]+?)(=[^\]]+?)?\](.+?)\[/\1\]#";
$replace = "";
return preg_replace($pattern, $replace, $string);
}
该错误消息是有点神秘,但实际上给你一些见解,如果看一看的preg_replace
的文档,你会发现他们谈论的改性剂。这些修饰符用于将选项传递给PCRE库,即做一些不区分大小写的匹配,字符串在unicode等。
问题依赖于你用作分隔符的字符;您正在使用/
并且正则表达式包含斜杠,因此PCRE认为\1\]/
是您的修改器。将分隔符更改为#
可解决该问题。
答
那么,你的分隔符是/
和你结束分隔符后的字符串\1\]/
,但既不\1
还是其他字符是有效的改性剂。
选择一个不同的分隔符,或者简单地在表达式中将其全部出现。
你想删除标签(并保留其内容)吗?这种BBCode的风味是否允许嵌套标签? (例如,许多BBCode解析器允许'[quote]'标记嵌套)。如果是这样,您的解决方案将需要更复杂一点。现在您拥有的嵌套标签无法正常工作。 – ridgerunner 2011-12-21 17:06:54