在PHP中,正则表达式默认是贪婪匹配的,即尽可能多地匹配符合条件的字符。但是可以通过在量词后面添加一个问号(?)来实现非贪婪匹配,也叫懒惰匹配。
下面是一个例子,演示了贪婪匹配和懒惰匹配的区别:
$str = "abc123def456";
// 贪婪匹配
preg_match("/\d+/", $str, $matches);
echo $matches[0]; // 输出:123456
// 懒惰匹配
preg_match("/\d+?/", $str, $matches);
echo $matches[0]; // 输出:1
在上面的例子中,正则表达式\d+
表示匹配一个或多个数字。在贪婪匹配中,正则引擎会尽可能多地匹配数字,因此结果是123456。而在懒惰匹配中,正则引擎会尽可能少地匹配数字,因此结果是1。
需要注意的是,懒惰匹配只对量词(如+
、*
、?
、{n}
等)有效,对于其他部分的正则表达式,如字符类、分组等,懒惰匹配不起作用。
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站