貪婪模式:在整個表示式匹配成功的前提下,盡可能多的匹配 ( * );
非貪婪模式:在整個表示式匹配成功的前提下,盡可能少的匹配 ( ? );
python 裡數量詞預設是貪婪的。
使用貪婪的數量詞的正規表示式 ab* ,匹配結果: abbb。
* 決定了盡可能多匹配 b,所以 a 後面所有的 b 都出現了。
使用非貪婪的數量詞的正規表示式 ab*?,匹配結果: a。
即使前面有 *,但是 ? 決定了盡可能少匹配 b,所以沒有 b。
使用貪婪的數量詞的正規表示式:.*
匹配結果:test1
bbtest2
這裡採用的是貪婪模式。在匹配到第乙個「
」時已經可以使整個表示式匹配成功,
但是由於採用的是貪婪模式,所以仍然要向右嘗試匹配,檢視是否還有更長的可以成功
匹配的子串。匹配到第二個「
」後,向右再沒有可以成功匹配的子串,匹配結束,
匹配結果為「test1
bbtest2
」使用非貪婪的數量詞的正規表示式:.*?
匹配結果:test1
正規表示式二採用的是非貪婪模式,在匹配到第乙個「
」時使整個表示式匹配成
功,由於採用的是非貪婪模式,所以結束匹配,不再向右嘗試,匹配結果為
「test1
」。
貪婪與非貪婪模式
對於匹配優先量詞的匹配下限很好理解,等價於 它修飾的子表示式,最少匹配0次,最多匹配1次 等價於 它修飾的子表示式,最少匹配0次,最多匹配無窮多次 等價於 它修飾的子表示式,最少匹配1次,最多匹配無窮多次。對於忽略優先量詞的下限,也是容易忽略的。也是忽略優先量詞,被修飾的子表示式使用的也是非貪婪模式...
貪婪模式和非貪婪模式
1.什麼是正規表示式的貪婪與非貪婪匹配 如 string str abcaxc patter p ab c 貪婪匹配 正規表示式一般趨向於最大長度匹配,也就是所謂的貪婪匹配。如上面使用模式p匹配字串str,結果就是匹配到 abcaxc ab c 非貪婪匹配 就是匹配到結果就好,就少的匹配字元。如上面...
貪婪模式和非貪婪模式
正規表示式通常使用於查詢匹配的字串。python裡數量詞預設是貪婪的 在少數語言裡也可能預設是非貪婪 總是嘗試匹配盡可能多的字元 非貪婪模式剛好相反,總是嘗試匹配盡可能少的字元。例如,正規表示式 ab 如果用於查詢 abbbc 就會找到 abbb 如果使用非貪婪的數量詞 ab 就會找到 a 例如1 ...