爲什麼正則表達式模式/y+?z/
匹配整個字符串yyyz
?正則表達式:理解非貪婪重複
我的理解是模式/y+z/
是貪婪因此將匹配一個或多個字符y
後跟單個字符z
。爲了使這個表達式非貪婪(僅匹配y
的第一個實例),我可以在+
字符後立即引入一個?
字符。例如/y+?z/
。現在,我希望這種模式匹配字符串yz
。但是,情況並非如此。相反,整個字符串yyyz
被匹配。
爲什麼正則表達式模式/y+?z/
匹配整個字符串yyyz
?正則表達式:理解非貪婪重複
我的理解是模式/y+z/
是貪婪因此將匹配一個或多個字符y
後跟單個字符z
。爲了使這個表達式非貪婪(僅匹配y
的第一個實例),我可以在+
字符後立即引入一個?
字符。例如/y+?z/
。現在,我希望這種模式匹配字符串yz
。但是,情況並非如此。相反,整個字符串yyyz
被匹配。
正則表達式匹配總是從最早的位置開始,這是第一個y
。由於匹配z
部分正則表達式的唯一方法是匹配所有介入的y
s,正則表達式將匹配整個字符串。
懶惰評價並不意味着「儘可能少的匹配」,而是「儘可能少地匹配以完成當前位置的匹配」。
當前位置是第一個'y'嗎? – henrywright
@henrywright:對,正則表達式引擎在從左到右的整個字符串中工作,並在每個位置嘗試匹配,直到找到匹配。既然*有*是從第一個'y'開始的有效匹配,那就是它找到的那個。 –
你究竟在做什麼? –
將量詞應用於特定字符時,它沒有太大區別。當量詞應用於可以匹配許多不同字符的東西時,區別就更加清楚了。 – Pointy
@TimPietzcker你的回答已經爲我解釋了它。將在〜8分鐘內接受。謝謝 – henrywright