【发布时间】:2011-08-30 07:32:29
【问题描述】:
我看过这篇关于匹配多个正则表达式的帖子 How can I match against multiple regexes in Perl?
我正在寻找将数组中包含的所有值与一个非常大的文件 (500 MB) 进行匹配的最快方法。
模式是从标准输入读取的,并且可能包含必须在正则表达式中使用的特殊字符(锚点、字符类等)。当所有模式都包含在当前行中时,匹配必须发生。
目前我正在使用嵌套的for循环,但我对速度不是很满意......
感谢您的建议。
【问题讨论】:
-
您如何确认 500MB 数据的 IO 速度不是限制因素?
-
作为一个简单的优化,请确保首先测试最有可能失败的正则表达式。这样,您可以在发现故障时尽快跳到下一条记录。
-
也许您应该向我们展示一些代码和正则表达式,以便我们可以使用一些东西。此外,有关输入外观的任何信息。
-
文件被读取然后加载到一个数组中以便更快的访问,所以我认为它不是瓶颈。
-
@user764169 你把 500 megs 拉进内存?假设您逐行搜索并且每个文件只执行一次,这会浪费大量内存,并且不会影响搜索性能。事实上,当 Perl 分配所有内存时,它可能会减慢速度。