我正在使用此代码
preg_match_all("/([^#]+\btbds\b.+?)#/iu", $data, $matches);
找到所有名为tbds的单词,但它需要大约1.20秒来执行模式搜索。如果我只使用tbds \ b而不是\ btbds \ b它只需0.19秒(少6倍)。
preg_match_all("/([^#]+tbds\b.+?)#/iu", $data, $matches);
有没有办法优化单词match \ btbds \ b大约0.19秒?我需要处理大量数据。谢谢你提前。
这是测试代码:
function generateRandomString($length = 10) {
$characters = ' 0123 456 789 abcd efgh ijkl mn opqrstu vwx yzAB CDE FGHI JKL MNOP QRS TUVWX YZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
$randomString = preg_replace('/\s+/', ' ', $randomString);
return trim($randomString,' ');
}
$data=NULL;
for ($a = 1; $a < 1000000; $a++)
$data.=" ".generateRandomString(100)." #";
$t = microtime(true);
preg_match_all("/([^#]+\btbds\b.+?)#/iu", $data, $matches);
echo microtime(true) - $t; echo "\n";
答案 0 :(得分:1)
答案 1 :(得分:1)