PHP正则preg_replace()函数 Unknown modifier 'c'问题

今天看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="以下内容不显示:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值