正規表示式 貪婪和非貪婪

2021-08-14 02:02:20 字數 712 閱讀 7316

源字串:aatest1

bbtest2

cc 正規表示式一:.*

匹配結果一:test1

bbtest2

(貪婪)

正規表示式二:.*?

匹配結果二:test1

(這裡指的是一次匹配結果,所以沒包括test2

) (非貪婪)

貪婪與非貪婪模式影響的是被量詞修飾的子表示式的匹配行為,貪婪模式在整個表示式匹配成功的前提下,盡可能多的匹配,而非貪婪模式在整個表示式匹配成功的前提下,盡可能少的匹配。非貪婪模式只被部分nfa引擎所支援。 

屬於貪婪模式的量詞,也叫做匹配優先量詞,包括: 

「」、「」、「?」、「*」和「+」。 

在一些使用nfa引擎的語言中,在匹配優先量詞後加上「?」,即變成屬於非貪婪模式的量詞,也叫做忽略優先量詞,包括: 

「?」、「?」、「??」、「*?」和「+?」。 

從正則語法的角度來講,被匹配優先量詞修飾的子表示式使用的就是貪婪模式,如「(expression)+」;被忽略優先量詞修飾的子表示式使用的就是非貪婪模式,如「(expression)+?」。 

對於貪婪模式,各種文件的叫法基本一致,但是對於非貪婪模式,有的叫懶惰模式或惰性模式,有的叫勉強模式,其實叫什麼無所謂,只要掌握原理和用法,能夠運用自如也就是了。個人習慣使用貪婪與非貪婪的叫法,所以文中都會使用這種叫法進行介紹。 

正規表示式貪婪和非貪婪模式

限定符都是貪婪的,因為它們會盡可能多的匹配文字,只有在它們的後面加上乙個?就可以實現非貪婪或最小匹配。文字 貪婪 下面的表示式匹配從開始小於符號 之間的所有內容。非貪婪 如果您只需要匹配開始和結束 h1 標籤,下面的非貪婪表示式只匹配 如果只想匹配開始的 h1 標籤,表示式則是 可以在grep中使用...

正規表示式 貪婪非貪婪模式

貪婪與非貪婪模式影響的是被量詞修飾的子表示式的匹配行為,貪婪模式在整個表示式匹配成功的前提下,盡可能多的匹配,而非貪婪模式在整個表示式匹配成功的前提下,盡可能少的匹配。非貪婪模式只被部分nfa引擎所支援。1.舉乙個例子 string str abcaxc patter p ab.c 貪婪匹配 正規表...

python正規表示式 貪婪 非貪婪

主要就是.與.的區別,是貪婪的,是非貪婪的例子如下 import re line cats are smarter than dogs matchobj1 re.match r are line matchobj2 re.match r are line matchobj1.group 1 matc...