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

2021-06-01 10:08:04 字數 887 閱讀 5017

進行正則匹配時,像+  *   ?  以及{m,n}這幾種量詞(匹配數量)預設是屬於貪婪量詞,會進行貪婪匹配。

什麼叫做貪婪匹配呢?貪婪就是盡可能的多匹配,貪心的意思。

比如現在目標字串是 aaaa    四個a組成的字串

a*  和 a+ 都會匹配 aaaa

a? 則會匹配       a

這就是貪婪匹配,實際運用中,有的時候我們卻希望盡可能少的匹配

比如目標字串 a

b此時如果我們使用了貪婪量詞

.* 則會匹配 a

b 整個字串

可是我們只想要匹配第一對span標籤怎麼辦?此時就需要用到懶惰量詞,意思也很明顯了,能偷懶就偷懶,呵呵,懶惰量詞與貪婪量詞的差別就是在貪婪量詞的後面加個?號,就構成了懶惰量詞,如下表

貪婪量詞        懶惰量詞

a*                         a*?

a+                        a+?

a?                        a??

a                  a?

還是以目標字串 aaaa  來討論

a*?   

*號是匹配0次或多次,要偷懶怎麼辦呢?當然是最少次數了,也就是0   所以在這裡匹配的結果是

沒有匹配到任何內容

a+?+是1次或多次,分析方法同上,最少次數是1次,所以匹配結果就是 a

a???是0次或1次,所以這裡也不進行匹配,會偷懶吧,呵呵

再來看看剛剛的 a

b要匹配第一對span,用懶惰量詞就是.*?

我已經說的夠明白了吧?這些內容我以前都是查了好多資料才知道的。

正規表示式是相當強大的語言,尤其在進行字元匹配和查詢時,當然要需要花一定的時間才能掌握。

貪婪匹配和懶惰匹配

符號用法.匹配除 r n 之外的任何單個字元。要匹配包括 r n 在內的任何字元,請使用像 s s 的模式。匹配前面的子表示式0到1次 匹配前面的子表示式人任意次 匹配前面的子表示式一次或多次 大於等於1次 表示式 的意思很好理解,就是單個字元匹配任意次,即貪婪匹配。表示式 是滿足條件的情況只匹配一...

PHP正則貪婪 懶惰匹配模式

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

正規表示式 貪婪匹配與懶惰匹配

在學習之前,需要熟悉一下基本操作符的含義 表示換行外任意字元,表示重複前乙個數一次或多次。先舉個栗子 匹配乙個字串 import re res aabab r1 re.findall a.b res findall 返回列表型別 r2 re.findall a.b res print r1,r2 匹...