foreach和preg_match对大量数据无法正常工作
我要文件,一个是关键字序列(~20k行),另一个是正则表达式(~2.5k)。
我想用每个regexp测试每个关键字并打印匹配的关键字。我测试了我的文件,大约有22 750 000个测试。我使用以下代码:
$count = 0;
$countM = 0;
foreach ($arrayRegexp as $r) {
foreach ($arrayKeywords as $k) {
$count++;
if (preg_match($r, $k, $match) {
$countM++;
echo $k.' matched with keywords '.$match[1].'<br/>';
}
}
}
echo "$count tests with $countM matches.";
不幸的是,在计算一段时间后,只显示实际匹配的部分内容,并且最后一行保持计数永远不会显示。更奇怪的是,如果我评论preg部分只保留两个foreach和计数显示,一切正常。
我认为这是由于需要处理过多的数据,但我想知道是否有建议我没有遵循这种操作。我使用的正则表达式非常复杂,我不能改变别的东西。
想法有人吗?
没有找到相关结果
已邀请:
2 个回复
蹄寄噬非芹
邵酮
。通常,PCRE可以比PHP执行循环更快地评估备选方案。 我不确定这是否更快(修改主题),但你可以直接使用关键字数组作为参数preg_replace_callback(),从而消除第二个循环。 例如:
但定义一个自定义打印功能来输出和计算结果,让它只返回例如一个空字符串。 想想看,preg_replace_callback也会采用一系列正则表达式。不确定它是否交叉检查每个字符串上的每个正则表达式。