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