我正在使用rubular.com来构建我的正则表达式,他们的文档描述了以下内容:
(...) Capture everything enclosed
(a|b) a or b
如何使用OR表达式而不捕获其中的内容?例如,假设我要捕获“ac”或“bc”。我不能使用正则表达式
(a|b)(c)
正确?从那时起,我在一组中捕获“a”或“b”,在另一组中捕获“c”,而不是相同。我知道我可以过滤捕获的结果,但这似乎更多的工作......
我错过了一些明显的东西吗?我在Java中使用它,如果这是相关的。
答案 0 :(得分:140)
根据正则表达式的实现,您可以使用语法为(?:…)
的所谓非捕获组:
((?:a|b)c)
此处(?:a|b)
是一个群组,但您无法引用其匹配。因此,您只能引用((?:a|b)c)
或ac
bc
的匹配。
答案 1 :(得分:18)
如果你的实现有它,那么你可以使用非捕获括号:
(?:a|b)
答案 2 :(得分:4)
如果您的OR替代词都是单个字符-您可以使用“字符集”运算符:
([ab]c)
它将仅匹配ac
或bc
,并且更具可读性。
答案 3 :(得分:1)
即使rubular也不会使用括号,|
的优先级也很低。例如a|bc does not match ccc