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

问题描述 投票:0回答:4

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

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

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

(a|b)(c)

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

我是否遗漏了一些明显的东西?如果相关的话,我正在 Java 中使用它。

regex capture regex-group
4个回答
262
投票

根据正则表达式实现,您可以使用所谓的非捕获组,其语法为

(?:…)
:

((?:a|b)c)

这里

(?:a|b)
是一个组,但您无法引用其匹配项。因此,您只能引用
((?:a|b)c)
的匹配,即
ac
bc


37
投票

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

(?:a|b)

9
投票

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

([ab]c)

它只会匹配

ac
bc
并且更具可读性。


3
投票

即使是 rubular 也不会让你使用括号,而且

|
的优先级也很低。例如 a|bc 与 ccc

不匹配
© www.soinside.com 2019 - 2024. All rights reserved.