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

我使用 Rubular.com构建正则表达式,他们的文档描述如下:

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

如何在不捕捉 OR 表达式内容的情况下使用 OR 表达式?例如,假设我想捕获“ ac”或“ bc”。我不能用正则表达式

(a|b)(c)

对吧?从那时起,我在一组中捕获“ a”或“ b”,在另一组中捕获“ c”,这是不一样的。我知道我可以过滤掉捕捉到的结果,但那看起来需要更多的工作..。

我是不是漏掉了什么显而易见的东西? 如果相关的话,我正在 Java 中使用它。

128883 次浏览

根据正则表达式的实现,您可以使用语法 (?:…)的所谓 没有捕获的群体:

((?:a|b)c)

这里的 (?:a|b)是一个组,但是您不能引用它的匹配。因此,您只能引用 ((?:a|b)c)的匹配,即 acbc

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

(?:a|b)

即使是粗体也不会让你使用括号,而且 |的优先级很低

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

([ab]c)

它将只匹配 acbc和它的可读性更好。