微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-在没有括号的正则表达式中分组竖线分隔的选项?

是否可以不使用括号将正则表达式的部分分组?或者,换句话说,与某些括号内的陈述不匹配?这就是我的意思-考虑以下正则表达式:

 $pattern = '/^(what|where|who) (are|is) (.+)$/i';
 preg_match($pattern, $input, $matches);

现在.注意前两个子查询-带有垂直条的子查询.我如何防止那些人出现?如果$input是“他是谁”,我希望“他”成为唯一匹配的子查询.

我了解到,在这个示例中,我只需要抓住$matches [3]就可以给我正确的结果.但是,由于我的应用程序的性质,我正在动态生成正则表达式,并且该结构并不总是像本例中那样.我可以有X个竖线分隔的子查询,和Y个(.)子查询.我只想匹配(.).

是否有可能做到这一点?我可以根据需要重写我的正则表达式,但是我不知道如何在不使用括号的情况下对语句进行分组,括号是用来标记查询的.我正在使用PHP,如果有关系的话.

谢谢!

解决方法:

您可以像下面这样在前两个分组中消除反向引用:

$pattern = '/^(?:what|where|who) (?:are|is) (.+)$/i';

圆括号开头的?:告诉正则表达式引擎不要为该分组创建后向引用.每当您不打算使用反向引用时,都包括进行优化是很好的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐