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

时间:2010-07-31 15:42:56

标签: regex capture regex-group

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

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

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

(a|b)(c)

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

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

4 个答案:

答案 0 :(得分:140)

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

((?:a|b)c)

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

答案 1 :(得分:18)

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

(?:a|b)

答案 2 :(得分:4)

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

([ab]c)

它将仅匹配acbc,并且更具可读性。

答案 3 :(得分:1)

即使rubular也不会使用括号,|的优先级也很低。例如a|bc does not match ccc