正規表示式中數量詞的貪婪和非貪婪

2021-08-05 22:50:58 字數 578 閱讀 9112

在使用各種數量詞時,正規表示式總是匹配盡可能多的復合規則的字元,知道允許匹配的上限。

例如,在使用表示式/bo+/匹配"booooo"時,會得到匹配結果"booooo"而不是匹配"bo"。

例如,在使用表示式/bo/匹配"booooo"時,會先匹配"booooo",發現不匹配,則去掉末尾的「o」,匹配"boooo",這時匹配上了,故最後得到的匹配結果是"boooo"。

有時我們並不希望匹配採用這種預設模式,二十希望盡可能滿足較少的次數。例如,希望在"boooo"中返回匹配"bo",而不是"boooo",這種匹配可以通過非貪婪數量詞實現。

通過在數量詞後再加上乙個"?"符號,形成數量詞的非貪婪數量詞,使重複次數不定的表示式匹配盡可能少的次數,使可匹配可不匹配的表示式,盡可能地"不匹配"。這種匹配原則叫做"非貪婪"模式,也叫"勉強"模式。如果少匹配就會導致整個表示式匹配失敗的時候,與貪婪模式類似,非貪婪模式也會最小限度地再匹配一些,以使整個表示式匹配成功。

例如,使用表示式/bo+?/匹配"boooo"時,將得到匹配結果"bo",而不是"boooo"。

使用表示式/bo?k/匹配"booook"時,為了使匹配滿足,將得到匹配"booook"。

關於正規表示式數量詞的貪婪與非貪婪模式

在匹配正則的時候或許會遇到返回的結果多幾個字元或者少幾個字元,什麼原因呢,這個就是正則的貪婪與非貪婪模式,假設,我的匹配字元是 a asdf444adfadf adfsadf 正規表示式的貪婪模式 a z 列印結果 asdf adfadf adfsad 按原理來說在匹配到第二個字元的時候條件就已經滿...

正規表示式的數量詞

greedy 數量詞x?x,一次或一次也沒有x x,零次或多次x x,一次或多次 xx,恰好 n 次 xx,至少 n 次 xx,至少 n 次,但是不超過m 次 reluctant 數量詞x?x,一次或一次也沒有x x,零次或多次x x,一次或多次x?x,恰好 n 次x?x,至少 n 次x?x,至少 ...

正規表示式 貪婪和非貪婪

源字串 aatest1 bbtest2 cc 正規表示式一 匹配結果一 test1 bbtest2 貪婪 正規表示式二 匹配結果二 test1 這裡指的是一次匹配結果,所以沒包括test2 非貪婪 貪婪與非貪婪模式影響的是被量詞修飾的子表示式的匹配行為,貪婪模式在整個表示式匹配成功的前提下,盡可能多...