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

时间:2012-04-28 10:24:00

标签: php regex

抱歉标题格式错误,但我不知道如何更好地解释这个问题。举个例子:我希望使用匹配的组来匹配某些东西,但我也想在该组中使用组,因为我需要它们用于匹配但我不希望这些内部组使用PHP显示为结果preg_match。以下是此类查询的示例:

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

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

由于

1 个答案:

答案 0 :(得分:7)

您必须使用non-capturing subpatterns

  

普通括号实现两个功能的事实并不总是有用的。有时候需要分组子模式而没有捕获要求。如果左括号后跟“?:”,则子模式不执行任何捕获,并且在计算任何后续捕获子模式的数量时不计算。

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

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