我有一个处理大rtf文件的任务,>500Мb。我需要从这些大文件中找到并提取部件。
这是一个用Java编写的工作原型,用于演示目的。
我创建了一个正则表达式,适用于较小的rtf文件(~10Мb),并尝试将此表达式应用于大文件。
执行此正则表达式时出现“堆栈溢出”错误。
据我所知,正则表达式具有递归性质,这也是我获得异常的原因。在较小的文件上,regexp运行良好且快速。
我能正确理解原因吗?
答案 0 :(得分:0)
否:正则表达式没有递归性质。任何体面的语言都只是将这种表达式转换为有限状态机。这意味着它需要相同数量的内存(以及结果堆栈大小)来过滤10 MiB或500 MiB的文件。此外,它在时间上线性扩展:一个期望过滤500 MiB的文件所需的时间是10 MiB中的一个。
你在使用正则表达式评估器是什么?对于grep
/ sed
较小或较大的文件不是问题。