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

u4vypkhs  于 12个月前  发布在  其他
关注(0)|答案(4)|浏览(101)

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

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

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

(a|b)(c)


是吧?从那以后,我在一个组中捕获“a”或“B”,在另一个组中捕获“c”,不一样。我知道我可以过滤捕获的结果,但那似乎需要更多的工作.
我是不是错过了什么明显的东西?我在Java中使用了这个,如果这是相关的。

643ylb08

643ylb081#

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

((?:a|b)c)

字符串
这里(?:a|b)是一个组,但是你不能引用它的匹配项。所以你只能引用((?:a|b)c)的匹配项acbc

iih3973s

iih3973s2#

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

(?:a|b)

字符串

kh212irz

kh212irz3#

如果您的OR选项都是单个字符-您可以使用“字符集”操作符:

([ab]c)

字符串
它将只匹配acbc,它的可读性更强。

mnowg1ta

mnowg1ta4#

即使是rubular也不会让你使用圆括号,而且|的优先级很低。

相关问题