是否可以在不使用括号的情况下对正则表达式的部分进行分组?或者,换句话说,与某些括号内的陈述不匹配?这就是我的意思——考虑以下正则表达式:
$pattern = '/^(what|where|who) (are|is) (.+)$/i';
preg_match($pattern, $input, $matches);
现在。注意前两个子查询——带有竖线的子查询。我如何防止那些出现?如果$input
是“他是谁”,我希望“他”是唯一匹配的子查询。
我明白,在这个例子中,我可以抓住$matches[3]
,这会给我正确的结果。但是,由于我的应用程序的性质,我正在动态生成正则表达式,并且结构不会总是像我在这个示例中那样。我可以有 X 个竖线分隔的子查询和 Y(.+)
个子查询。我只想匹配(.+)
那些。
是否有可能做到这一点?如有必要,我可以重写我的正则表达式,但我不知道如何在不使用括号的情况下对语句进行分组,括号标记子查询。如果重要的话,我正在使用 PHP。
谢谢!