貪婪與非貪婪模式影響的是被量詞修飾的子表示式的匹配行為,貪婪模式在整個表示式匹配成功的前提下,盡可能多的匹配,而非貪婪模式在整個表示式匹配成功的前提下,盡可能少的匹配。非貪婪模式只被部分nfa引擎所支援。
屬於貪婪模式的量詞,也叫做匹配優先量詞,包括:
「」、「」、「?」、「*」和「+」。
在一些使用nfa引擎的語言中,在匹配優先量詞後加上「?」,即變成屬於非貪婪模式的量詞,也叫做忽略優先量詞,包括:
「?」、「?」、「??」、「*?」和「+?」。
從正則語法的角度來講,被匹配優先量詞修飾的子表示式使用的就是貪婪模式,如「(expression)+」;被忽略優先量詞修飾的子表示式使用的就是非貪婪模式,如「(expression)+?」。
對於貪婪模式,各種文件的叫法基本一致,但是對於非貪婪模式,有的叫懶惰模式或惰性模式,有的叫勉強模式,其實叫什麼無所謂,只要掌握原理和用法,能夠運用自如也就是了。個人習慣使用貪婪與非貪婪的叫法,所以文中都會使用這種叫法進行介紹。
出處:
貪婪與非貪婪模式
對於匹配優先量詞的匹配下限很好理解,等價於 它修飾的子表示式,最少匹配0次,最多匹配1次 等價於 它修飾的子表示式,最少匹配0次,最多匹配無窮多次 等價於 它修飾的子表示式,最少匹配1次,最多匹配無窮多次。對於忽略優先量詞的下限,也是容易忽略的。也是忽略優先量詞,被修飾的子表示式使用的也是非貪婪模式...
PHP正則之貪婪和非貪婪模式
php的正規表示式 非貪婪模式,盡量少匹配符合條件的專案 貪婪模式,盡量多匹配符合條件的專案 非貪婪模式 a 123123123 pattern 1 string 38 正則替換 非貪婪模式 str remove a tag hello worldkim green goodstudy patter...
Python正則貪婪非貪婪
自己遇到的問題,小記一下!coding utf 8 author johnny import re line baaaaacfbsbdada reg str b.b match str re.match reg str,line if match str print match str.group ...