1
1
不要过多地阅读基准测试结果。他们很难做好。实际上,您应该从中得到的唯一一点是,在某些类型的字符串上,重复的速度可能更快,因为这些字符串的重复跨度很长。 这种类型的东西可以很容易地改变与不同版本的PCRE。 function tst($pat, $str) { $start = microtime(true); preg_replace($pat, '', $str); return microtime(true) - $start; } $strs = array( 'letters' => str_repeat("a", 20000), 'numbers' => str_repeat("1", 20000), 'mostly_letters' => str_repeat("aaaaaaaaaaaaa5", 20000), 'mostly_numbers' => str_repeat("5555555555555a", 20000) ); $pats = array( 'rep' => '/[^0-9.]+/', 'norep' => '/[^0-9.]/' ); //precompile patterns(php caches them per script) and warm up microtime microtime(true); preg_replace($pats['rep'], '', 'foo'); preg_replace($pats['norep'], '', 'foo'); foreach ($strs as $strname => $str) { echo "$strname\n"; foreach ($pats as $patname => $pat) { printf("%10s %.5f\n", $patname, tst($pat, $str)); } } |
2
1
我做了一些速度测试 chris 建议。与他的代码相比:
$str_replace_array = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.'); function tst($pat, $str) { global $str_replace_array; $start = microtime(true); if($pat == '') str_replace($str_replace_array, '', $str); else preg_replace($pat, '', $str); return microtime(true) - $start; }
结果如下:
它显示了重复regex
此外,str_替换 基本上总是 比regex替换更快(速度的两倍),除非regex与完整字符串匹配。 |
3
0
我没有做任何测试,但是使用+你匹配更多的字符,所以替换过程应该执行更少的时间。如果不在regexp中写入+符号,则将对每个字符进行替换,而不是替换整个子字符串,因此我认为速度较慢。 |
lonix · 使用sed从JSON中提取非贪婪正则表达式 1 年前 |
Dima Malko · 如何在指定符号前添加符号? 2 年前 |
shekharsabale · 从列表元素捕获子字符串 2 年前 |
Katia · 根据特定规则进行多行匹配 2 年前 |
MHA · Pandas str.extract()以字母结尾的数字 2 年前 |
Slava Vir · 如何查找后面“/”之间的最后一组 2 年前 |