Java 基于贪婪和不情愿的模式匹配算法
在javaJava 基于贪婪和不情愿的模式匹配算法,java,regex,Java,Regex,在javaregex中,我读到了。他们提到 一个不情愿或“不贪婪”的量词首先匹配 可能的因此,.*一开始不匹配任何内容,留下整个 字符串不匹配 在这个例子中 来源:yyxxxyxx 模式:*xx 贪婪量词*并产生 0 yyxxxyxx 我们得到了以下信息: 0 yyxx 4 xyxx 为什么即使是最小的可能值,yxx,yxx的结果也不可能?正则表达式引擎返回它找到的第一个和最左边的匹配结果 基本上,它尝试从第一个字符开始匹配模式。如果没有找到对应的匹配项,则传输将跳入并从第二个字符重试,依此
regex
中,我读到了。他们提到
一个不情愿或“不贪婪”的量词首先匹配
可能的因此,.*一开始不匹配任何内容,留下整个
字符串不匹配
在这个例子中
来源:yyxxxyxx
模式:
*xx
贪婪量词*
并产生
0 yyxxxyxx
我们得到了以下信息:
0 yyxx
4 xyxx
为什么即使是最小的可能值,
yxx
,yxx
的结果也不可能?正则表达式引擎返回它找到的第一个和最左边的匹配结果
基本上,它尝试从第一个字符开始匹配模式。如果没有找到对应的匹配项,则传输将跳入并从第二个字符重试,依此类推
如果在bab
上使用a+?b
,它将首先从第一个b
开始尝试。那不行,所以我们试着从第二个角色开始
但在这里,它从第一个字符中找到匹配项。从第二场开始,我们甚至没有考虑,我们找到了一场比赛,所以我们回来了
如果您在aab
上应用a+?b
,我们会在第一个a
处尝试,并找到一个整体匹配:故事结束,没有理由尝试其他任何东西
总而言之:正则表达式引擎从左向右,因此懒惰只会影响右侧长度