先掃盲一下什麼是正規表示式的貪婪,什麼是非貪婪?或者說什麼是匹配優先量詞,什麼是忽略優先量詞?
好吧,我也不知道概念是什麼,來舉個例子吧。
某同學想過濾之間的內容,那是這麼寫正則以及程式的。
複製** **如下:
$str = preg_replace('%%i','',$str);//非貪婪
看起來,好像沒什麼問題,其實則不然。若
複製** **如下:
$str = 'alert(documentwww.cppcns.com.cookie)';
那麼經過上面的程式處理,其結果為
複製** **如下:
$str = 'alert(document.cookie)';
$str = preg_replace('%%i','',$str);//非貪婪
print_r($str);
//$str 輸出為
仍然達不到他想要的效果。上面的就是非貪婪,也有的叫惰性。其標誌非貪婪的標識為量數元字元後面加? ,比如 +?、*?、??(比較特殊,以後的blog中,我會寫到)等。即標識非貪婪,如果不寫?就是貪婪。比如
複製** **如下:
$str = 'alert(document.cookie)';
$str = preg_replace('%%i','',$st程式設計客棧r);//非貪婪
print_r($str);
//$str 輸出為 "; //長度大於100014
$ret www.cppcns.com= preg_repalce($reg, "", $str); //返回null
其原因就是回溯太多了,直到造成耗盡棧空間爆棧。
再來看個例子。
字串
複製** **如下:
$str = 'www.cppcns.compt>123456';
正規表示式為
複製** **如下:
$strregex1 = '%
正規表示式 貪婪與非貪婪
在一段時間內,一直不知道.和.之間的區別,一直單純的覺得兩者之間並沒有什麼區別,都是匹配任意字元,知道今天才知道其中的區別 首先從乙個簡單的問題的問題開始思考 有這樣乙個字串aaabaaab,和這樣的乙個正則.b,那麼.匹配的會是aaab還是aaabaaab呢?由此問題引發出來的就是貪婪與非貪婪模式...
正規表示式 貪婪與非貪婪匹配
貪婪匹配與非貪婪匹配 貪婪匹配 預設情況下,正規表示式使用最長匹配原則 也叫貪婪匹配原則 例如 要將 zoom 中匹配 zo?的部 分替換成 r 替換的的結果是 rom 如果要將 zoom 中匹配 zo 的部分替換成 r 替換後的結果是 rm 非貪婪匹配 當字元?緊隨其他限定符 之後時,匹配模式變成...
正規表示式貪婪與非貪婪模式
之前做程式的時候看到過正規表示式的貪婪與非貪婪模式,今天用的時候就想不起來了,現在這裡總結一下,以備自己以後用到注意。1.什麼是正規表示式的貪婪與非貪婪匹配 如 string str abcaxc patter p ab c 貪婪匹配 正規表示式一般趨向於最大長度匹配,也就是所謂的貪婪匹配。如上面使...