正则expression式:问号和冒号
我有以下的Java正则expression式,我没有写,我试图修改:
^class-map(?:(\\s+match-all)|(\\s+match-any))?(\\s+[\\x21-\\x7e]{1,40})$ ^ ^
这和这个很像
注意第一个问号。 这是否意味着该组是可选的? 相应的后面已经有一个问号了)
。 冒号在正则expression式中有特殊意义吗?
正则expression式编译得很好,而且已经有JUnittesting显示它是如何工作的。 这只是我有点困惑,为什么第一个问号和冒号在那里。
(?:
启动一个非捕获组,这与之前没有区别(
除非你在使用后从正则expression式中检索组),请参阅什么是非捕获组?问号后面跟冒号(?:)是什么意思?
有点迟到这个线程 – 只是build立在ryanp的答案。
假设你有stringaaabbbccc
正则expression式
(a)+(b)+(c)+
这会给你以下3个匹配的组:
['a', 'b', 'c']
正则expression式与非捕获括号
在第一组中使用?:
(?:a)+(b)+(c)+
你会得到以下匹配的组:
['b', 'c']
因此,为什么它被称为“ 非捕获括号”
示例用例:
有时你用括号来做其他事情。 例如设置|
的边界 或运营商:
"New (York|Jersey)"
在这种情况下,您只使用or的括号 开关,而你并不想捕获这些数据。 使用非捕获括号来表示:
"New (?:York|Jersey)"