我正在使用 rubular.com 来构建我的正则表达式,他们的文档描述了以下内容:
(...) Capture everything enclosed
(a|b) a or b
如何使用 OR 表达式而不捕获其中的内容?例如,假设我想捕获“ac”或“bc”。我无法使用正则表达式
(a|b)(c)
对吗?从那时起,我在一组中捕获“a”或“b”,在另一组中捕获“c”,不一样。我知道我可以过滤捕获的结果,但这似乎需要更多工作......
我是否遗漏了一些明显的东西?如果相关的话,我正在 Java 中使用它。
根据正则表达式实现,您可以使用所谓的非捕获组,其语法为
(?:…)
:
((?:a|b)c)
这里
(?:a|b)
是一个组,但您无法引用其匹配项。因此,您只能引用 ((?:a|b)c)
的匹配,即 ac
或 bc
。
如果您的实现有它,那么您可以使用非捕获括号:
(?:a|b)
如果您的 OR 替代项都是单个字符 - 您可以只使用“字符集”运算符:
([ab]c)
它只会匹配
ac
或 bc
并且更具可读性。