
PHP正则表达式中的+含义及贪婪/非贪婪匹配
在PHP正则表达式中,+符号表示匹配前面字符出现一次或多次。 然而,+本身并不直接代表贪婪或非贪婪匹配。 贪婪与否取决于正则表达式引擎的默认行为以及是否使用了非贪婪修饰符?。
PHP的preg_*函数系列默认使用贪婪匹配。 贪婪匹配是指正则表达式引擎会尝试匹配尽可能多的字符,直到匹配失败为止。 非贪婪匹配则相反,它会尝试匹配尽可能少的字符,满足条件即停止。
示例:
立即学习“PHP免费学习笔记(深入)”;
代码:
$name = "abc:def:ghi";preg_match('/^[^:]++(:[^:]++)*$/', $name, $matches);print_r($matches);$text = "abca";preg_match('/.*?a/', $text, $matches1);preg_match('/.*+a/', $text, $matches2);echo "n非贪婪匹配结果:";print_r($matches1);echo "n贪婪匹配结果:";print_r($matches2);
解释:
^[^:]++(:[^:]++)*$:这个正则表达式中,+匹配一个或多个非冒号字符。由于没有?修饰符,它采用默认的贪婪匹配。 (:[^:]++)*部分则匹配零个或多个以冒号开头,后跟一个或多个非冒号字符的子串。
/.*?a/:这个正则表达式使用?修饰符,使*变为非贪婪匹配,因此它匹配尽可能少的字符,直到遇到第一个”a”。
/.*+a/:这个正则表达式采用默认的贪婪匹配,它会匹配尽可能多的字符,直到遇到最后一个”a”。
总结:
+本身仅表示“一个或多个”,而贪婪或非贪婪是由正则表达式引擎的默认行为(PHP默认贪婪)和?修饰符决定的。 要实现非贪婪匹配,需要在量词(如*、+、?、{n,m})后面添加?。
以上就是PHP正则表达式中++究竟是什么意思?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1253040.html
微信扫一扫
支付宝扫一扫