Java 关于正则表达式捕获组的澄清

Java 关于正则表达式捕获组的澄清,java,regex,capturing-group,Java,Regex,Capturing Group,直接从这个java(ctrl+f)+“组名”: 与组关联的捕获输入始终是子序列 小组最近匹配的。如果对组进行第二次评估 由于量化而产生的时间,则其先前捕获的值,如果 如果第二次评估失败,将保留任何。匹配 字符串“aba”对应表达式(a(b)?)+,例如,leaves 第二组设置为“b”。所有捕获的输入在开始时被丢弃 每一场比赛的结果 我知道捕获组是如何工作的,以及它们如何使用反向引用。 然而,我还没有得到我上面引用的API位的要点。换言之,有人能把它写下来吗 提前感谢。那句话说: 如果您使用了量

直接从这个java(ctrl+f)+“组名”:

与组关联的捕获输入始终是子序列 小组最近匹配的。如果对组进行第二次评估 由于量化而产生的时间,则其先前捕获的值,如果 如果第二次评估失败,将保留任何。匹配 字符串“aba”对应表达式(a(b)?)+,例如,leaves 第二组设置为“b”。所有捕获的输入在开始时被丢弃 每一场比赛的结果

我知道捕获组是如何工作的,以及它们如何使用反向引用。 然而,我还没有得到我上面引用的API位的要点。换言之,有人能把它写下来吗

提前感谢。

那句话说:

如果您使用了量词-
+,*?或者{m,n}
,在您的捕获组上,如果您的组被多次匹配,则只有最后一个匹配将与捕获组关联,并且将覆盖以前的所有匹配

例如:如果将
(a)+
与字符串-
“aaaaa”
匹配,则捕获组1将引用最后一个
a

现在考虑一个例子,在这里你有一个嵌套的捕获组,如在你的引用中所示的例子:

`(a(b)?)+`
将此正则表达式与字符串-
“aba”
匹配,将得到以下两个匹配项:

  • “ab”
    -捕获组1=
    “ab”
    (由于外括号),捕获组2=
    “b”
    (由于内括号)
  • “a”
    -捕获组1=
    “a”
    ,捕获组2=无。(这是因为第二个捕获组
    (b)?
    是可选的。因此,它成功地匹配了最后一个
    a
因此,最后,您的捕获组1将包含
“a”
,它将覆盖先前捕获的组
“ab”
,而捕获组2将包含
“b”
,它将不被覆盖。

该引用说明:

如果您在捕获组上使用了量词-
+、*、?或{m,n}
,并且您的组被多次匹配,则只有最后一个匹配将与捕获组关联,并且之前的所有匹配都将被覆盖

例如:如果将
(a)+
与字符串-
“aaaaa”
匹配,则捕获组1将引用最后一个
a

现在考虑一个例子,在这里你有一个嵌套的捕获组,如在你的引用中所示的例子:

`(a(b)?)+`
将此正则表达式与字符串-
“aba”
匹配,将得到以下两个匹配项:

  • “ab”
    -捕获组1=
    “ab”
    (由于外括号),捕获组2=
    “b”
    (由于内括号)
  • “a”
    -捕获组1=
    “a”
    ,捕获组2=无。(这是因为第二个捕获组
    (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] 他捕获的与组相关的输入总是组最近匹配的子序列