修飾“.”的仍然是匹配優先量詞“*”,所以這里還是貪婪模式,前面的“ div .* /div ”仍然可以匹配到“ div test1 /div bb div test2 /div ”,但是由于后面的“bb”無法匹配成功,這時“ div .* /div ”必須讓出已匹配的“bb div test2 /div ”,以使整個表達式匹配成功。這時整個表達式匹配的結果為“ div test1 /div bb”,“ div .* /div ”匹配的內容為“ div test1 /div ”。可以看到,在“整個表達式匹配成功”的前提下,貪婪模式才真正的影響著子表達式的匹配行為,如果整個表達式匹配失敗,貪婪模式只會影響匹配過程,對匹配結果的影響無從談起。
非貪婪模式也存在同樣的問題,來看下面的例子。
正則表達式四: div .*? /div cc
匹配結果四: div test1 /div bb div test2 /div cc
這里采用的是非貪婪模式,前面的“ div .*? /div ”仍然是匹配到“ div test1 /div ”為止,此時后面的“cc”無法匹配成功,要求“ div .*? /div ”必須繼續向右嘗試匹配,直到匹配內容為“ div test1 /div bb div test2 /div ”時,后面的“cc”才能匹配成功,整個表達式匹配成功,匹配的內容為“ div test1 /div bb div test2 /div cc”,其中“ div .*? /div ”匹配的內容為“ div test1 /div bb div test2 /div ”。可以看到,在“整個表達式匹配成功”的前提下,非貪婪模式才真正的影響著子表達式的匹配行為,如果整個表達式匹配失敗,非貪婪模式無法影響子表達式的匹配行為。