137

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

(...)   Capture everything enclosed
(a|b)   a or b

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

(a|b)(c)

正确的?从那时起,我在一组中捕获“a”或“b”,在另一组中捕获“c”,不一样。我知道我可以过滤捕获的结果,但这似乎需要更多的工作......

我错过了一些明显的东西吗?如果相关的话,我在 Java 中使用它。

4

4 回答 4

229

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

((?:a|b)c)

(?:a|b)是一个组,但您不能引用它的匹配项。因此,您只能引用((?:a|b)c)that isac或的匹配项bc

于 2010-07-31T15:45:14.317 回答
29

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

(?:a|b)
于 2010-07-31T15:46:01.137 回答
5

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

([ab]c)

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

于 2020-03-17T17:44:21.223 回答
3

即使 rubular 也不会让你使用括号,并且优先级|很低。例如a|bc 不匹配 ccc

于 2010-07-31T15:59:21.837 回答