PHP preg_match_all 100 MB文件

时间:2012-07-03 17:14:55

标签: php regex file

我已经读过" preg_match_all"不是用于解析大文件,但我需要这样做。我增加了:

pcre.backtrack_limit=1000000000
pcre.recursion_limit=1000000000

我的PHP memory_limit设置为5000M,脚本在0.2秒内仍然没有任何错误或异常结束......

唯一的解决方案是将100M文件拆分为100个小1M文件吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:4)

考虑使用更适合处理大量数据的命令行工具。

grep,sed,awk或其中的一些组合。

答案 1 :(得分:3)

根据您的code我建议你这样做:

  1. 将变量$data设置为空字符串

  2. 将变量$work设置为空字符串;读取数据块并将此字符串附加到$data

  3. 使用正则表达式#^(.*?)(<tr>\n(?!.*<tr>\n).*)$#$data拆分为$work$data

  4. 查找$work

  5. 中的所有匹配项
  6. 在数据可用的情况下返回第2点

  7. 查找$data

  8. 中的所有匹配项