模式匹配使用贪婪和不情愿

在java regex我读过有关Greedy和Reluctant Quantifiers的内容 。 他们提到了

一个不情愿或“非贪婪”的量词首先尽可能少地匹配。 所以。*首先匹配任何内容,使整个字符串无法匹配

在这个例子中

来源: yyxxxyxx
模式: .*xx

贪心量词*并产生

 0 yyxxxyxx 

不情愿的资格赛*? ,我们得到以下内容:

 0 yyxx 4 xyxx 

为什么yxxyxx结果不可能,即使它是可能的最小值?

正则表达式引擎返回它找到的第一个和最左边的匹配项。

基本上它会尝试匹配从第一个字符开始的模式。 如果没有找到相应的匹配,则传输跳入并再次从第二个字符开始尝试,依此类推。

如果你在bab上使用a+?b ,它将首先从第一个b开始尝试。 这不起作用,所以我们尝试从第二个角色。

但是在这里它从第一个角色找到了一个匹配。 从第二个开始甚至没有考虑,我们找到了匹配,所以我们返回。

如果您在aab上应用a+?b ,我们会尝试在第一个a并找到一个整体匹配:故事结束,没有理由尝试其他任何事情。

总结一下 :正则表达式引擎从左向右移动,因此懒惰只会影响右侧长度。