我想用正则过滤JS里代码,但是总是写不好!
比如 <script>function tt () {xffdfdfdfdfd}</script>
把所有的
1 | <?php |
2 | $html = '777444553sdg<script>function tt () {xffdfdfdfdfd}</script>gsgsdasdaad124' ; |
3 | $search = "/<script[^>]*?>.*?<\/script>/si" ; |
4 | $rr = preg_replace( $search , ' ' , $html ); |
5 | echo $rr ; |
6 | ?> |
正则表达式代码:
/<script[^>]*?>.*?<\/script>/si
正则表达式教程:(你只想要结果,以下内容可以不用看了)
其实这个正则很简单
为了匹配<script>。。</script>内容我第一时间就想到这样写
/<script>.+<\/script>/si
相信刚刚接触正则的都会这样写。
因为正则的贪婪性。会导致这样的字符串也会被匹配,
如: <script>……a……</script>……<div>……</div>……<script>……b……</script>
后面我这样写
/<script>.*?<\/script>/si
已经可以匹配了。
还有遗漏,就是 <script type="text/javascript" >这种情况没有考虑
后来看了PHP手册才知道还要这样写
/<script[^>]*?>.*?<\/script>/si
[^>]*?
是什么意思呢?
[^>] 是对>取反,也就是说,取一个字符不为">" 的字符
*?就是取0次到无限次。
整个来说是: 取0个到无限个不为“>”的字符。
对于以上例子是匹配 <script type="text/javascript" >部分
本人能力不足只解释到这里了。有关回溯的问题以后再讨论了。