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正则表达式中++究竟是什么意思?的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号