先掃盲一下什麼是正規表示式的貪婪,什麼是非貪婪?或說什麼是匹配優先量詞,什麼是忽略優先量詞?
好吧,我也不知道概念是什麼,來舉例。
某同學想過濾之間的內容,那是這麼寫正則以及程序的。
$str = preg_replace('%<script>.+?</script>%i','',$str);//非贪婪
看起來,好像沒什麼問題,其實則不然。若
$str = '<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>';
那麼經過上面的程序處理,其結果為
$str = '<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>'; $str = preg_replace('%<script>.+?</script>%i','',$str);//非贪婪 print_r($str); //$str 输出为 <script>alert(document.cookie)</script>
仍然達不到他想要的效果。上面的就是非貪婪,也有的叫惰性。其標誌非貪婪的標識為量數元字元後面加? ,例如 +?、*?、??(比較特殊,以後的BLOG中,我會寫到)等。即標識非貪婪,如果不寫?就是貪婪。例如
$str = '<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>'; $str = preg_replace('%<script>.+</script>%i','',$str);//非贪婪 print_r($str); //$str 输出为作者最新文章
1970-01-01 08:00:00 1970-01-01 08:00:00 1970-01-01 08:00:00 1970-01-01 08:00:00 1970-01-01 08:00:00 1970-01-01 08:00:00 1970-01-01 08:00:00 1970-01-01 08:00:00 1970-01-01 08:00:00 1970-01-01 08:00:00最新問題function_exists()無法判定自訂函數 function test() { return true; } if (function_exists('TEST')) { ech...來自於 2024-04-29 11:01:01032287父視窗沒有輸出 document.onclick = function(){ window.opener.document.write('我是子視窗的輸出'); ...來自於 2024-04-18 23:52:34011920