【PHP】用正則表達式過濾js代碼(注意這個分析過程)

我想用正則過濾JS裏代碼,可是老是寫很差!javascript

好比 <script>function tt () {xffdfdfdfdfd}</script> php

把全部的 <script>function tt () {xffdfdfdfdfd}</script> 都刪除掉html

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 ?>

 正則表達式代碼:java

 /<script[^>]*?>.*?<\/script>/si正則表達式

 

正則表達式教程:(你只想要結果,如下內容能夠不用看了)post

 其實這個正則很簡單spa

爲了匹配<script>。。</script>內容我第一時間就想到這樣寫code

/<script>.+<\/script>/sihtm

相信剛剛接觸正則的都會這樣寫。教程

由於正則的貪婪性。會致使這樣的字符串也會被匹配,

如: <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" >部分

 

本人能力不足只解釋到這裏了。有關回溯的問題之後再討論了。

相關文章
相關標籤/搜索