正則貪婪 懶惰和強佔型別之間的區別

2021-08-01 09:58:48 字數 633 閱讀 1782

貪婪型別將會試圖匹配整個字串。如果匹配不成功,那麼會回退乙個字元再匹配,直到匹配成功為止。

懶惰型別將從字串的第乙個字元開始匹配,如果不成功,則再增加乙個字元。直到成功為止。

強佔型別將會試圖匹配整個字串。如果匹配不成功,並不會回退。

下面我們來測試一下:

請輸入正規表示式:.*foo // 貪婪

請輸入檢索文字:xfoo******foo

檢索到匹配文字"xfoo******foo"從位置 0 到 13。

請輸入正規表示式:.*?foo // 懶惰

請輸入檢索文字:xfoo******foo

檢索到匹配文字"xfoo"從位置 0 到 4。

檢索到匹配文字"******foo"從位置 4 到 13。

請輸入正規表示式:.*+foo // 獨佔

請輸入檢索文字:xfoo******foo

沒有檢索到匹配的文字。

舉例如下:
([0-9]月[0-9]日[\\s\\s]

+?瀏覽)

這是懶惰模式,
注意紅色部分在中間,而不是

([0-9]月[0-9]日[\\s\\s]

*瀏覽)

+?

正則中的「貪婪匹配」和「懶惰匹配」

進行正則匹配時,像 以及 m,n 這幾種量詞 匹配數量 預設是屬於貪婪量詞,會進行貪婪匹配。什麼叫做貪婪匹配呢?貪婪就是盡可能的多匹配,貪心的意思。比如現在目標字串是 aaaa 四個a組成的字串 a 和 a 都會匹配 aaaa a?則會匹配 a 這就是貪婪匹配,實際運用中,有的時候我們卻希望盡可能少...

正規表示式的貪婪與懶惰

當正規表示式中包含能接受重複的限定符 指定數量的 例如 等 時,通常的行為是 在使整個表示式能得到匹配的前提下 匹配盡可能多的字元。考慮這個表示式 a.b,它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。這被稱為貪婪匹配。有時,我們更需要懶惰匹配,...

正規表示式的貪婪與懶惰

當正規表示式中包含能接受重複的限定符時,通常的行為是 在使整個表示式能得到匹配的前提下 匹配盡可能多的字元。以這個表示式為例 a.b,它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。這被稱為貪婪匹配。有時,我們更需要懶惰匹配,也就是匹配盡可能少的字...