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