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

2021-10-07 14:18:44 字數 1038 閱讀 9169

在學習之前,需要熟悉一下基本操作符的含義:

. 表示換行外任意字元,

+ 表示重複前乙個數一次或多次。

先舉個栗子(匹配乙個字串):

import re

res =

"aabab"

r1 = re.findall(

'a.*b'

,res)

#findall()返回列表型別

r2 = re.findall(

'a.*?b'

,res)

print

(r1,r2)

匹配型別

操作結果

操作的翻譯

貪婪匹配

a.*b

[ aabab]

匹配乙個最長的字串,從a開始,以b結束

懶惰匹配

a.*?b

[aab]和[ab]

匹配乙個最短的字串,從a開始,以b結束

那麼對於匹配有數字的字串又有什麼區別呢,這裡依舊給出乙個栗子。

import re

res =

"aabab 123"

r1 = re.

findall

('.*(\d+)'

,res)#findall

()返回列表型別

r2 = re.

findall

('.*?(\d+)'

,res)

print

(r1,r2)

r1的結果是[『3』]

r2的結果是[『123』]

他們之間的差異也就只在乙個問號,輸出來的結果卻不一樣,原因如下:

貪婪匹配直接就從開始匹配到了2,即aabab12,剩了乙個3滿足\d+,於是結果為3,而懶惰匹配,只是匹配最短的字元,即到了空格就結束,因為123恰好滿足\d+,於是結果就為123。

好了文章已經差不多了,謝謝**,如有錯誤請指證!

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

過去一直感覺這個地方很不好懂,今天又大致的看了一下,拿來跟大家共享一下,呵呵!當正則表示式中包含能接受重複的限定符 指定數量的 例如 等 時,通常的行為是 在使整個表示式能得到匹配的前提下 匹配盡可能多的字元。考慮這個表示式 a.b,它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab...

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

過去一直感覺這個地方很不好懂,今天又大致的看了一下,拿來跟大家共享一下,呵呵!當正則表示式中包含能接受重複的限定符 指定數量的 例如 等 時,通常的行為是 在使整個表示式能得到匹配的前提下 匹配盡可能多的字元。考慮這個表示式 a.b,它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab...

正規表示式貪婪匹配

個人感覺對正規表示式理解的還算多的,貪婪模式也用過,但是最近匹配位址資訊的時候老是出錯 如下 寧波 鄞州 21.59901313997095 29.80867802546617 寧波鄞州區鄞縣大道萬科桂語裡小區 盲點小區 編號 fg 2019 寧波 鄞州 21.59901313997095 29.8...