Java 关于正则表达式捕获组的澄清
直接从这个java(ctrl+f)+“组名”: 与组关联的捕获输入始终是子序列 小组最近匹配的。如果对组进行第二次评估 由于量化而产生的时间,则其先前捕获的值,如果 如果第二次评估失败,将保留任何。匹配 字符串“aba”对应表达式(a(b)?)+,例如,leaves 第二组设置为“b”。所有捕获的输入在开始时被丢弃 每一场比赛的结果 我知道捕获组是如何工作的,以及它们如何使用反向引用。 然而,我还没有得到我上面引用的API位的要点。换言之,有人能把它写下来吗 提前感谢。那句话说: 如果您使用了量词-Java 关于正则表达式捕获组的澄清,java,regex,capturing-group,Java,Regex,Capturing Group,直接从这个java(ctrl+f)+“组名”: 与组关联的捕获输入始终是子序列 小组最近匹配的。如果对组进行第二次评估 由于量化而产生的时间,则其先前捕获的值,如果 如果第二次评估失败,将保留任何。匹配 字符串“aba”对应表达式(a(b)?)+,例如,leaves 第二组设置为“b”。所有捕获的输入在开始时被丢弃 每一场比赛的结果 我知道捕获组是如何工作的,以及它们如何使用反向引用。 然而,我还没有得到我上面引用的API位的要点。换言之,有人能把它写下来吗 提前感谢。那句话说: 如果您使用了量
+,*?或者{m,n}
,在您的捕获组上,如果您的组被多次匹配,则只有最后一个匹配将与捕获组关联,并且将覆盖以前的所有匹配
例如:如果将(a)+
与字符串-“aaaaa”
匹配,则捕获组1将引用最后一个a
现在考虑一个例子,在这里你有一个嵌套的捕获组,如在你的引用中所示的例子:
`(a(b)?)+`
将此正则表达式与字符串-“aba”
匹配,将得到以下两个匹配项:
-捕获组1=“ab”
(由于外括号),捕获组2=“ab”
(由于内括号)“b”
-捕获组1=“a”
,捕获组2=无。(这是因为第二个捕获组“a”
是可选的。因此,它成功地匹配了最后一个(b)?
a
“a”
,它将覆盖先前捕获的组“ab”
,而捕获组2将包含“b”
,它将不被覆盖。该引用说明:
如果您在捕获组上使用了量词-+、*、?或{m,n}
,并且您的组被多次匹配,则只有最后一个匹配将与捕获组关联,并且之前的所有匹配都将被覆盖
例如:如果将(a)+
与字符串-“aaaaa”
匹配,则捕获组1将引用最后一个a
现在考虑一个例子,在这里你有一个嵌套的捕获组,如在你的引用中所示的例子:
`(a(b)?)+`
将此正则表达式与字符串-“aba”
匹配,将得到以下两个匹配项:
-捕获组1=“ab”
(由于外括号),捕获组2=“ab”
(由于内括号)“b”
-捕获组1=“a”
,捕获组2=无。(这是因为第二个捕获组“a”
是可选的。因此,它成功地匹配了最后一个(b)
a
因此,最后您的捕获组1将包含
“a”
,它将覆盖先前捕获的组“ab”
,而捕获组2将包含“b”
,它不会被覆盖。在本例中,命名捕获与否无关
考虑以下输入文本:
foo-bar-baz
这个正则表达式:
[a-z]+(-[a-z]+)*
现在的问题是第1组捕获了什么
当正则表达式在文本中前进时,它首先匹配-bar
,然后是组1的内容;但随后它在文本中继续,并识别-baz
,现在是组1的新内容
因此,-bar
已“丢失”:正则表达式引擎已放弃它,因为输入中的更多文本与捕获组匹配。这就是它的含义:
[t] 他捕获的与组相关的输入总是组最近匹配的子序列
在这种情况下,命名捕获与否无关 考虑以下输入文本:
foo-bar-baz
这个正则表达式:
[a-z]+(-[a-z]+)*
现在的问题是第1组捕获了什么
当正则表达式在文本中前进时,它首先匹配-bar
,然后是组1的内容;但随后它在文本中继续,并识别-baz
,现在是组1的新内容
因此,-bar
已“丢失”:正则表达式引擎已放弃它,因为输入中的更多文本与捕获组匹配。这就是它的含义:
[t] 他捕获的与组相关的输入总是组最近匹配的子序列