首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex:?:表示法(问号和冒号表示法)

Regex:?:表示法(问号和冒号表示法)
EN

Stack Overflow用户
提问于 2012-07-18 05:04:32
回答 2查看 72.1K关注 0票数 104

我有以下Java正则表达式,它不是我编写的,我正在尝试修改:

代码语言:javascript
复制
^class-map(?:(\\s+match-all)|(\\s+match-any))?(\\s+[\\x21-\\x7e]{1,40})$
           ^                                 ^

它类似于this one

注意第一个问号。这是否意味着该组是可选的?在相应的)后面已经有一个问号。冒号在regex中有特殊含义吗?

正则表达式编译得很好,并且已经有JUnit测试显示了它是如何工作的。只是我有点困惑为什么会有第一个问号和冒号。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-18 05:06:22

(?:会启动一个非捕获组。它与(没有什么不同,除非您在使用后从正则表达式中检索组。参见What is a non-capturing group? What does a question mark followed by a colon (?:) mean?

票数 153
EN

Stack Overflow用户

发布于 2015-04-29 10:51:49

这个帖子有点晚了--只是为了在ryanp的回答上有所建树。

假设您有字符串aaabbbccc

正则表达式

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

这将为您提供以下3个匹配的组:

代码语言:javascript
复制
['a', 'b', 'c']

带非捕获括号的正则表达式

使用第一组中的?:

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

您将获得以下匹配的组:

代码语言:javascript
复制
['b', 'c']

因此,它被称为"non-capturing括号“

示例用例:

有时你会使用括号来做其他的事情。例如,要设置|或运算符的边界:

代码语言:javascript
复制
"New (York|Jersey)"

在本例中,您只使用了或|开关的括号,并且您并不真正想要捕获此数据。使用非捕获括号表示:

代码语言:javascript
复制
"New (?:York|Jersey)"
票数 50
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11530862

复制
相关文章

相似问题

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