我可以在正则表达式中使用OR而不捕获所包含的内容吗?

gog*_*n13 96 regex capture regex-group

我正在使用rubular.com来构建我的正则表达式,他们的文档描述了以下内容:

(...)   Capture everything enclosed
(a|b)   a or b
Run Code Online (Sandbox Code Playgroud)

如何使用OR表达式而不捕获其中的内容?例如,假设我要捕获"ac"或"bc".我不能使用正则表达式

(a|b)(c)
Run Code Online (Sandbox Code Playgroud)

对?从那时起,我在一组中捕获"a"或"b",在另一组中捕获"c",而不是相同.我知道我可以过滤捕获的结果,但这似乎更多的工作......

我错过了一些明显的东西吗 我在Java中使用它,如果这是相关的.

Gum*_*mbo 158

根据正则表达式实现,您可以使用所谓的非捕获组,其语法(?:…)如下:

((?:a|b)c)
Run Code Online (Sandbox Code Playgroud)

(?:a|b)是一个组,但你不能引用它的匹配.所以,你只能引用本场比赛的((?:a|b)c)要么是acbc.

  • 我认为这个想法根本不是捕获`a`或`b`.换句话说,要*匹配*`ac`或`bc`,但只能*捕获*`c`:`(?:a | b)(c)` (4认同)

Mar*_*utz 22

如果您的实现具有它,那么您可以使用非捕获括号:

(?:a|b)
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您的 OR 替代项都是单个字符 - 您可以只使用“字符集”运算符:

([ab]c)
Run Code Online (Sandbox Code Playgroud)

它只会匹配acorbc并且更具可读性。