我有以下Java正则表达式,它不是我编写的,我正在尝试修改:
^class-map(?:(\\s+match-all)|(\\s+match-any))?(\\s+[\\x21-\\x7e]{1,40})$
^ ^它类似于this one。
注意第一个问号。这是否意味着该组是可选的?在相应的)后面已经有一个问号。冒号在regex中有特殊含义吗?
正则表达式编译得很好,并且已经有JUnit测试显示了它是如何工作的。只是我有点困惑为什么会有第一个问号和冒号。
发布于 2012-07-18 05:06:22
(?:会启动一个非捕获组。它与(没有什么不同,除非您在使用后从正则表达式中检索组。参见What is a non-capturing group? What does a question mark followed by a colon (?:) mean?。
发布于 2015-04-29 10:51:49
这个帖子有点晚了--只是为了在ryanp的回答上有所建树。
假设您有字符串aaabbbccc
正则表达式
(a)+(b)+(c)+这将为您提供以下3个匹配的组:
['a', 'b', 'c']带非捕获括号的正则表达式
使用第一组中的?:
(?:a)+(b)+(c)+您将获得以下匹配的组:
['b', 'c']因此,它被称为"non-capturing括号“
示例用例:
有时你会使用括号来做其他的事情。例如,要设置|或运算符的边界:
"New (York|Jersey)"在本例中,您只使用了或|开关的括号,并且您并不真正想要捕获此数据。使用非捕获括号表示:
"New (?:York|Jersey)"https://stackoverflow.com/questions/11530862
复制相似问题