模式匹配使用贪婪和不情愿
在java regex
我读过有关Greedy和Reluctant Quantifiers的内容 。 他们提到了
一个不情愿或“非贪婪”的量词首先尽可能少地匹配。 所以。*首先匹配任何内容,使整个字符串无法匹配
在这个例子中
来源:
yyxxxyxx
模式:.*xx
贪心量词*
并产生
0 yyxxxyxx
不情愿的资格赛*?
,我们得到以下内容:
0 yyxx 4 xyxx
为什么yxx
, yxx
结果不可能,即使它是可能的最小值?
正则表达式引擎返回它找到的第一个和最左边的匹配项。
基本上它会尝试匹配从第一个字符开始的模式。 如果没有找到相应的匹配,则传输跳入并再次从第二个字符开始尝试,依此类推。
如果你在bab
上使用a+?b
,它将首先从第一个b
开始尝试。 这不起作用,所以我们尝试从第二个角色。
但是在这里它从第一个角色找到了一个匹配。 从第二个开始甚至没有考虑,我们找到了匹配,所以我们返回。
如果您在aab
上应用a+?b
,我们会尝试在第一个a
并找到一个整体匹配:故事结束,没有理由尝试其他任何事情。
总结一下 :正则表达式引擎从左向右移动,因此懒惰只会影响右侧长度。