今天我们从执行效率上来对比POSIX风格的ereg和兼容Perl风格的preg_match
我们都知道ereg是PHP的正则函数,而preg_match 是perl移植过来的。
两者的写法上都有些区别。
现在我们从执行效率上看看两者的区别
为了让时间上区别更明显 我们讲函数执行1000次 并对比3次看看他们的区别
$datetime = "2008-08-03";
$loopnum = 1000;
$num = 5;
/**
* 时间统计函数
*/
function microtime_float($time = null)
{
list($usec, $sec) = explode(' ', $time ? $time : microtime());
return ((float)$usec + (float)$sec);
}
echo "从时间转换来看各函数对字符处理效率:";
for ($k = 0; $k < $num; $k++){
$time_start = microtime_float();
for($i = 0; $i < $loopnum; $i++){
preg_match('/([/d]{4})-([/d]{2})-([/d]{2})/i', $datetime, $outarr);
$result = mktime(0, 0, 0, $outarr[2], $outarr[3], $outarr[1]);
}
$time_1 = microtime_float();
for($i = 0; $i < $loopnum; $i++){
ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $datetime, $outarr);
$result = mktime(0, 0, 0, $outarr[2], $outarr[3], $outarr[1]);
}
$time_2 = microtime_float();
echo '';
echo "1:preg_match: " . ($time_1 - $time_start) . " ";
echo "2:ereg: " . ($time_2 - $time_1) . " ";
echo '';
}
exit;
实验结果
1:preg_match: 0.212939977646
2:ereg: 0.223401069641
1:preg_match: 0.2032558918
2:ereg: 0.223510026932
1:preg_match: 0.205940008163
2:ereg: 0.215628862381
1:preg_match: 0.194499015808
2:ereg: 0.212404966354
1:preg_match: 0.200366020203
2:ereg: 0.210597038269
我们可以看出 在执行效率上 preg_match 还是比ereg的速度好略快一些,
实际上在PHP手册中 也有建议说:“注: 使用 Perl 兼容正则表达式语法的 preg_match() 函数通常是比 ereg() 更快的替代方案。”
可见 PHP也是推荐使用preg_match的