首頁 > 後端開發 > php教程 > PHP 正規表示式效率 貪婪、非貪婪與回溯分析(推薦)

PHP 正規表示式效率 貪婪、非貪婪與回溯分析(推薦)

高洛峰
發布: 2023-03-04 17:16:02
原創
1884 人瀏覽過

先掃盲一下什麼是正規表示式的貪婪,什麼是非貪婪?或說什麼是匹配優先量詞,什麼是忽略優先量詞?

好吧,我也不知道概念是什麼,來舉例。

某同學想過濾之間的內容,那是這麼寫正則以及程序的。

$str = preg_replace(&#39;%<script>.+?</script>%i&#39;,&#39;&#39;,$str);//非贪婪
登入後複製

   

看起來,好像沒什麼問題,其實則不然。若

$str = &#39;<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>&#39;;
登入後複製

   

那麼經過上面的程序處理,其結果為

$str = &#39;<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>&#39;;
$str = preg_replace(&#39;%<script>.+?</script>%i&#39;,&#39;&#39;,$str);//非贪婪
print_r($str);
//$str 输出为 <script>alert(document.cookie)</script>
登入後複製

   

仍然達不到他想要的效果。上面的就是非貪婪,也有的叫惰性。其標誌非貪婪的標識為量數元字元後面加? ,例如 +?、*?、??(比較特殊,以後的BLOG中,我會寫到)等。即標識非貪婪,如果不寫?就是貪婪。例如

$str = &#39;<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>&#39;;
$str = preg_replace('%<script>.+</script>%i','',$str);//非贪婪
print_r($str);
//$str 输出为 
            
            

            
        
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板