为什么正则表达式模式/y+?z/
与整个字符串yyyz
匹配?
我理解模式/y+z/
贪婪,因此会匹配一个或多个y
字符,后跟一个z
字符。要使此表达式非贪婪(仅匹配y
的第一个实例),我可以在?
字符后面立即引入+
字符。例如/y+?z/
。现在,我希望这个模式匹配字符串yz
。但事实并非如此。而是整个字符串yyyz
匹配。
答案 0 :(得分:4)
正则表达式匹配始终从最早的位置开始,这是第一个y
。由于匹配正则表达式的z
部分的唯一方法是匹配所有插入的y
,因此正则表达式将匹配整个字符串。
懒惰评估并不意味着“匹配尽可能少”,而是“尽可能少地匹配从当前位置完成匹配”。