(.+)默認(rèn)是貪婪匹配
(.+?)為惰性匹配
疑問號讓.+的搜索模式從貪婪模式變成惰性模式。
var str = 'aaa<div style="font-color:red;">123456</div>bbb'
<.+?>會匹配<div style="font-color:red;">
<.+>會匹配<div style="font-color:red;">123456</div>
要在瀏覽器測試結(jié)果的話,輸入:
var str = 'aaa<div style="font-color:red;">123456</div>bbb'
str.match(/<.+?>/);
str.match(/<.+>/);
下面舉個簡單的例子來說明。
1.貪婪匹配是先看整個字符串是否匹配,如果不匹配,它會去掉字符串的最后一個字符,并再次嘗試。如果還不匹配,那么再去掉當(dāng)前最后一個,直到發(fā)現(xiàn)匹配或不剩任何字符。
var str='abcdabceba'
/.+b/ //匹配一個或多個任意字符后面跟一個字母b
執(zhí)行str.match(/.+b/)
第一次(先看整個字符串是否是一個匹配) abcdabceba 不匹配,然后去掉最后一個字符a
第二次(去掉最后一個字符后再匹配) abcdabceb 匹配,返回abcdabceb。
2.惰性匹配是從左側(cè)第一個字符開始向右匹配, 先看第一個字符是不是一個匹配, 如果不匹配就加入下一個字符再嘗式匹配, 直到發(fā)現(xiàn)匹配...
執(zhí)行str.match(/.+?b/)
第一次(讀入左側(cè)第一個字符) a 不匹配加一個再式
第二次 ab 匹配,返回ab
當(dāng)正則表達(dá)式中包含重復(fù)量詞(如:*,?,+)時,通常的行為是匹配盡可能多的字符,比如:a(.*)b去匹配aabab字符串,它會匹配整個字符串,這被稱為貪婪匹配。
$str = 'aabab';
preg_match("/a(.*)b/", $str, $matches);
print_r($matches);
有的時候我們需要懶惰匹配,也就是匹配盡可能少的字符,在量詞后邊加一個問號?,比如(.*?)在能使整個匹配成功的前提下使用最少的重復(fù)。
$str = 'aabab';
preg_match("/a(.*?)b/", $str, $matches);
print_r($matches);
---------------------
如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答??! 點擊進(jìn)入論壇