大数据块的正则表达式

时间:2014-07-10 11:14:42

标签: java regex

我有一个处理大rtf文件的任务,>500Мb。我需要从这些大文件中找到并提取部件。

这是一个用Java编写的工作原型,用于演示目的。

我创建了一个正则表达式,适用于较小的rtf文件(~10Мb),并尝试将此表达式应用于大文件。

执行此正则表达式时出现“堆栈溢出”错误。

据我所知,正则表达式具有递归性质,这也是我获得异常的原因。在较小的文件上,regexp运行良好且快速。

我能正确理解原因吗?

1 个答案:

答案 0 :(得分:0)

否:正则表达式没有递归性质。任何体面的语言都只是将这种表达式转换为有限状态机。这意味着它需要相同数量的内存(以及结果堆栈大小)来过滤10 MiB或500 MiB的文件。此外,它在时间上线性扩展:一个期望过滤500 MiB的文件所需的时间是10 MiB中的一个。

你在使用正则表达式评估器是什么?对于grep / sed较小或较大的文件不是问题。