在學習之前,需要熟悉一下基本操作符的含義:
. 表示換行外任意字元,
+ 表示重複前乙個數一次或多次。
先舉個栗子(匹配乙個字串):
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...