我使用rubular.com来构建我的正则表达式,他们的文档描述了以下内容:
(...) Capture everything enclosed
(a|b) a or b
字符串
如何使用OR表达式而不捕获其中的内容?例如,假设我想捕获“ac”或“bc”。
(a|b)(c)
型
是吧?从那以后,我在一个组中捕获“a”或“B”,在另一个组中捕获“c”,不一样。我知道我可以过滤捕获的结果,但那似乎需要更多的工作.
我是不是错过了什么明显的东西?我在Java中使用了这个,如果这是相关的。
我使用rubular.com来构建我的正则表达式,他们的文档描述了以下内容:
(...) Capture everything enclosed
(a|b) a or b
字符串
如何使用OR表达式而不捕获其中的内容?例如,假设我想捕获“ac”或“bc”。
(a|b)(c)
型
是吧?从那以后,我在一个组中捕获“a”或“B”,在另一个组中捕获“c”,不一样。我知道我可以过滤捕获的结果,但那似乎需要更多的工作.
我是不是错过了什么明显的东西?我在Java中使用了这个,如果这是相关的。
4条答案
按热度按时间643ylb081#
根据正则表达式的实现,你可以使用所谓的 * 非捕获组 *,语法为
(?:…)
:字符串
这里
(?:a|b)
是一个组,但是你不能引用它的匹配项。所以你只能引用((?:a|b)c)
的匹配项ac
或bc
。iih3973s2#
如果你的实现有它,那么你可以使用非捕获括号:
字符串
kh212irz3#
如果您的OR选项都是单个字符-您可以使用“字符集”操作符:
字符串
它将只匹配
ac
或bc
,它的可读性更强。mnowg1ta4#
即使是rubular也不会让你使用圆括号,而且
|
的优先级很低。