我可以在正则expression式中使用OR而不捕获封闭的内容吗?
我使用rubular.com来构build我的正则expression式,其文档描述如下:
(...) Capture everything enclosed (a|b) a or b
我如何使用ORexpression式而不捕获其中的内容? 所以如果我想匹配“a或b跟着ac”,并且只捕获c,我不能使用
(a|b)(c)
对? 然后我抓住“a或b”以及“c”。 我知道我可以通过捕获的结果进行筛选,但似乎更多的工作…
我错过了什么明显的? 我在Java中使用这个,如果这是相关的。
根据正则expression式实现,可以使用语法(?:…)
所谓非捕获组 :
((?:a|b)c)
这里(?:a|b)
是一个组,但不能引用它的匹配。 所以你只能引用((?:a|b)c)
ac
或bc
的匹配。
如果你的实现有它,那么你可以使用非捕获括号:
(?:a|b)
即使是rubular也不会让你使用括号和|
的优先级 低。 例如a | bc不符合ccc