正規表示式貪婪模式

2021-06-27 04:19:51 字數 872 閱讀 8025

+貪婪匹配與非貪婪匹配

貪婪匹配

預設情況下,正規表示式使用最長匹配原則(也叫貪婪匹配原則)。

例如:要將"zoom"中匹配"zo?"的部 分替換成"r",替換的的結果是"rom"。如果要將"zoom"中匹配"zo*"   的部分替換成"r",替換後的結果是"rm"。

非貪婪匹配

當字元?緊隨其他限定符(*、+、?、、、)之後時,匹配模式變成了最短匹配原則(也 叫非貪婪匹配原則)。

例如:在字串"fooood"中,"fo+?"只匹配"fo"部分,而"fo+"匹配"foooo部分。

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

有時,我們更需要懶惰匹配,也就是匹配盡可能少的字元。前面給出的限定符都可以被轉化為懶惰匹配模式,只要在它後面加上乙個問號?。這樣.*?就意味著匹配任意數量的重複,但是在能使整個匹配成功的前提下使用最少的重複。現在看看懶惰版的例子吧:

a.*?b 匹配最短的,以a開始,以b結束的字串。如果把它應用於aabab的話,它會匹配aab和ab

.*跟.*?的區別

.*?匹配點前面的字元到問號後面字元最短的匹配,而.*則匹配到最後乙個能匹配到的

例子1、:匹配

中國人中國人

正則如下:因為是匹配第乙個雙引號到接下來的雙引號結束,否則如果用.*的話這個li有多個屬性就一直匹配到最後乙個屬性的結束了

([^<]*)

正規表示式, 貪婪模式

2018 2 28 10 15 09 星期三 好幾年沒怎麼用過正則了,正則有乙個常見的用法就是非貪婪模式 方法一 在 和 之後 表示非貪婪匹配 限定符都是貪婪的,因為它們會盡可能多的匹配文字,只有在它們的後面加上乙個?就可以實現非貪婪或最小匹配。這和 本身代表0次或1次的限制有關 除了換行符外的任意...

正規表示式 貪婪非貪婪模式

貪婪與非貪婪模式影響的是被量詞修飾的子表示式的匹配行為,貪婪模式在整個表示式匹配成功的前提下,盡可能多的匹配,而非貪婪模式在整個表示式匹配成功的前提下,盡可能少的匹配。非貪婪模式只被部分nfa引擎所支援。1.舉乙個例子 string str abcaxc patter p ab.c 貪婪匹配 正規表...

正規表示式 之貪婪模式

直觀上是盡可能多的匹配字元 在使用修飾匹配次數的特殊符號時,有幾種表示方法可以使同乙個表示式能夠匹配不同的次數,比如 具體匹配的次數隨被匹配的字串而定。這種重複匹配不定次數的表示式在匹配過程中,總是盡可能多的匹配。比如,針對文字 d d d 舉例如下 d w 中 w 將匹配第乙個 d 之後的所有字元...