是否可以在正则表达式中使用组而不会在结果中显示它们


Is it possible to use groups in regex without them showing up in the results?

很抱歉标题格式不正确,但我不知道如何更好地解释这个问题。举个例子:我想使用匹配组匹配某些内容,但我也想使用该组内的组,因为我需要它们进行匹配,但我不希望这些内部组作为结果显示使用 PHP 的 preg_match 。下面是此类查询的示例:

(([^0-9^'n]+)*([^0-9^'n^ ]+))

它将匹配包含空格但没有任何尾随空格的句子。如您所见,它使用一个外部组(我想要的结果)和其中的两个组。我是否可以将这些内部组替换为将完成相同工作的内容,或者以某种方式将它们标记为与结果数据无关?

谢谢

您必须使用非捕获子模式:

普通括号实现两个功能这一事实并不总是有帮助的。很多时候,不需要分组子模式而不需要捕获。如果左括号后跟"?:",则子模式不执行任何捕获,并且在计算任何后续捕获子模式的数量时不计算在内。

应用于您的正则表达式,它将变为:

/((?:[^0-9^'n]+)*(?:[^0-9^'n^ ]+))/