今天看PHP笔试题时,看到了一则信息。
---------------------------------------------------------------------------------------------------------
写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉):
$script="以下内容不显示:";
echo preg_replace("/
].*?>.*?/si", "替换内容", $script);
?>
---------------------------------------------------------------------------------------------------------
运行了一下,总是很慢,弄的我要死,后来没办法耐着性子查了N久
后来终于发现原来是这个情形:
总结,我犯的错误在 $str="/ ]*?>.*?/si": 这里面的已经有一个" / "了,所以开头的 " / "就和这个 " / "形成了匹配区间,而把这个" / "之后的" script>/ " 当成了模式修正符。但实际模式修正符只有i,m,s,x,e等少数几个,而"script>/ "里面的c,r,p,> ,/ 都不是模式修正符,所以才出了Unknown modifier 'c‘ Unknown modifier '/ ’ 等问题 (没有出现 Unknown modifier 's‘ ,是因为 s 是模式匹配符啊)。
所以正确的格式如下,填加两个转义字符便解决问题:
---------------------------------------------------------------------------------------------------------
$script="以下内容不显示:";
echo preg_replace("/
].*?>.*?/
/si", "替换内容", $script);
?>
php
$script="以下内容不显示:";
echo preg_replace("/
].*?>.*?/
/si
", "替换内容", $script);
?>
---------------------------------------------------------------------------------------------------------
本文通过一个具体的PHP正则表达式实例,探讨了如何正确地使用转义字符来避免解析错误,确保脚本正常运行。作者分享了一个常见的陷阱,并详细解释了解决方案。
函数 Unknown modifier )
8782

被折叠的 条评论
为什么被折叠?



