修饰“.”的仍然是匹配优先量词“*”,所以这里还是贪婪模式,前面的“ 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 ”。可以看到,在“整个表达式匹配成功”的前提下,非贪婪模式才真正的影响着子表达式的匹配行为,如果整个表达式匹配失败,非贪婪模式无法影响子表达式的匹配行为。