Java 基于贪婪和不情愿的模式匹配算法

Java 基于贪婪和不情愿的模式匹配算法,java,regex,Java,Regex,在javaregex中,我读到了。他们提到 一个不情愿或“不贪婪”的量词首先匹配 可能的因此,.*一开始不匹配任何内容,留下整个 字符串不匹配 在这个例子中 来源:yyxxxyxx 模式:*xx 贪婪量词*并产生 0 yyxxxyxx 我们得到了以下信息: 0 yyxx 4 xyxx 为什么即使是最小的可能值,yxx,yxx的结果也不可能?正则表达式引擎返回它找到的第一个和最左边的匹配结果 基本上,它尝试从第一个字符开始匹配模式。如果没有找到对应的匹配项,则传输将跳入并从第二个字符重试,依此

在java
regex
中,我读到了。他们提到

一个不情愿或“不贪婪”的量词首先匹配 可能的因此,.*一开始不匹配任何内容,留下整个 字符串不匹配

在这个例子中

来源:
yyxxxyxx

模式:
*xx

贪婪量词
*
并产生

0 yyxxxyxx
我们得到了以下信息:

0 yyxx
4 xyxx

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

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

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

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

但在这里,它从第一个字符中找到匹配项。从第二场开始,我们甚至没有考虑,我们找到了一场比赛,所以我们回来了

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

总而言之:正则表达式引擎从左向右,因此懒惰只会影响右侧长度