正規表示式之貪婪模式

2021-08-25 03:46:24 字數 616 閱讀 2508

象 * 這樣地重複是「貪婪的」;當重複乙個 re 時,匹配引擎會試著重複盡可能多的次數。如果模式的後面部分沒有被匹配,匹配引擎將退回並再次嘗試更小的重複。

一步步的示例可以使它更加清晰。讓我們考慮表示式 a[bcd]*b。它匹配字母 "a",零個或更多個來自類 [bcd]中的字母,最後以 "b" 結尾。現在想一想該 re 對字串 "abcbd" 的匹配。

step matched explanation

1 a a 匹配模式

2 abcbd 引擎匹配 [bcd]*,並盡其所能匹配到字串的結尾

3 failure 引擎嘗試匹配 b,但當前位置已經是字元的最後了,所以失敗

4 abcb 退回,[bcd]*嘗試少匹配乙個字元。

5 failure 再次嘗次b,但在當前最後一位字元是"d"。

6 abc 再次退回,[bcd]*只匹配 "bc"。

7 abcb 再次嘗試 b ,這次當前位上的字元正好是 "b"

re 的結尾部分現在可以到達了,它匹配 "abcb"。這證明了匹配引擎一開始會盡其所能進行匹配,如果沒有匹配然後就逐步退回並反覆嘗試 re 剩下來的部分。直到它退回嘗試匹配 [bcd] 到零次為止,如果隨後還是失敗,那麼引擎就會認為該字串根本無法匹配 re 。

正規表示式 之貪婪模式

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

正規表示式貪婪模式

貪婪匹配與非貪婪匹配 貪婪匹配 預設情況下,正規表示式使用最長匹配原則 也叫貪婪匹配原則 例如 要將 zoom 中匹配 zo?的部 分替換成 r 替換的的結果是 rom 如果要將 zoom 中匹配 zo 的部分替換成 r 替換後的結果是 rm 非貪婪匹配 當字元?緊隨其他限定符 之後時,匹配模式變成...

正規表示式, 貪婪模式

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