先掃盲一下什麼是正規表示式的貪婪,什麼是非貪婪?或說什麼是匹配優先量詞,什麼是忽略優先量詞?
好吧,我也不知道概念是什麼,來舉例。
某同學想過濾之間的內容,那是這麼寫正則以及程序的。
$str = preg_replace('%%i','',$str);//非贪婪
看起來,好像沒什麼問題,其實則不然。若
$str = '>alert(document.cookie)';
那麼經過上面的程序處理,其結果為
$str = '>alert(document.cookie)'; $str = preg_replace('%%i','',$str);//非贪婪 print_r($str); //$str 输出为
仍然達不到他想要的效果。上面的就是非貪婪,也有的叫惰性。其標誌非貪婪的標識為量數元字元後面加? ,例如 +?、*?、??(比較特殊,以後的BLOG中,我會寫到)等。即標識非貪婪,如果不寫?就是貪婪。例如
$str = '>alert(document.cookie)'; $str = preg_replace('%%i','',$str);//非贪婪 print_r($str); //$str 输出为 "; //长度大于100014 $ret = preg_repalce($reg, "", $str); //返回NULL
其原因就是回溯太多了,直到造成耗盡棧空間爆棧。
再來看個例子。
字串
$str = '';
字符串
$strRegex1 = '%