首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于正则捕获群的澄清

关于正则捕获群的澄清
EN

Stack Overflow用户
提问于 2013-07-12 09:25:22
回答 2查看 74关注 0票数 1

直接来自这个java API接口 (ctrl + f) + "Group“:

与组相关联的捕获输入始终是该组最近匹配的子序列。如果一个组由于量化而第二次被评估,那么如果第二个评估失败,它以前捕获的值(如果有的话)将被保留。例如,将字符串"aba“与表达式(a(b)?)+匹配,将第二组设置为"b”。所有捕获的输入都会在每次匹配开始时被丢弃。

我知道捕获组是如何工作的,以及它们是如何使用反向引用的。但是,我没有得到我上面引用的API位的要点。换句话说,有人能把它放下吗?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-12 09:38:50

这句话说:

如果您在捕获组中使用了量词- +, *, ? or {m,n},并且您的组不止一次匹配,那么只有最后一个匹配将与捕获组相关联,并且所有以前的匹配都将被覆盖。

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

现在考虑一下情况,其中有一个嵌套捕获组,如您的引号中所示的示例:

代码语言:javascript
复制
`(a(b)?)+`

将此正则表达式与字符串- "aba"匹配,将得到以下两个匹配项:

  • "ab" -捕获组1= "ab" (由于外括号),捕获组2="b"(由于内括号)
  • "a" -捕获组1= "a",捕获组2=无。(这是因为第二个捕获组(b)?是可选的。因此,它成功地匹配了最后一个a

最后,捕获组1将包含"a",它覆盖先前捕获的组"ab",捕获组2将包含未被重写的"b"

票数 2
EN

Stack Overflow用户

发布于 2013-07-12 09:40:29

在这种情况下,命名捕获或不捕获与此无关。

请考虑以下输入案文:

代码语言:javascript
复制
foo-bar-baz

而这大政王:

代码语言:javascript
复制
[a-z]+(-[a-z]+)*

现在的问题是,第一组捕捉到了什么?

当正则表达式在文本中进行时,它首先与-bar匹配,后者是第1组的内容;然后在文本中继续,并识别-baz,后者现在是第1组的新内容。

因此,-bar“丢失”:正则表达式引擎已经放弃它,因为输入中的更多文本与捕获组匹配。这就是这个意思:

与组相关联的捕获输入始终是该组最近匹配的重点挖掘的子序列。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17611645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档