PHP preg_match_all 100 MB file


PHP preg_match_all 100 MB file

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

pcre.backtrack_limit=1000000000
pcre.recursion_limit=1000000000

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

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

感谢您的帮助

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

grep,sed,awk或其某种组合。

基于您的代码,我建议您这样做:

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

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

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

  4. 查找 $work 中的所有匹配项

  5. 在数据可用时返回点 #2

  6. 查找 $data 中的所有匹配项