当用户更改源文件时,我需要对源文件中的某些模式进行大量搜索,因此我需要执行regexp匹配,这在时间和内存方面都很有效。模式会重复自身,所以应该编译一次,但我需要能够检索子部分(而不仅仅是确认匹配)。
我正在考虑使用java.util.regexp或雅加达perl5util (如果它仍然存在,我使用它已经有几年了),或者使用Eclipse搜索引擎,尽管我怀疑它是否更智能。
这两者之间有什么显著的性能差异吗?
发布于 2008-10-10 05:33:51
我不确定在不同的regexp java引擎之间是否存在巨大的性能差距。
但在构造正则表达式时肯定存在性能问题(即,如果数据足够大,则作为noted by Jeff Atwood)
您唯一应该避免的是catastrophic backtracking,最好在使用atomic grouping时避免。
因此,默认情况下,我会使用java.utils.regexp引擎,除非您有特定的兼容perl的regexp源代码需要在您的程序中重用。
然后,我将仔细构造我打算使用的regexp。
但在选择一个引擎或另一个引擎时。as it has been said in many other questions...:
发布于 2008-10-10 06:58:40
正如VonC所说,您需要知道您的正则表达式。预先编译正则表达式没有坏处,否则每次编译正则表达式的成本会严重影响性能。
对于某些类别,有其他库:http://jint.sourceforge.net/jint.html,它可能具有更好的性能。当然,这取决于您使用的是哪个版本的java。
JDK 1.6展示了regex引擎的成熟度,以及良好的特性和性能。
发布于 2008-10-10 13:23:35
总体而言,java.util.regex (不是"regexp")包至少与任何其他Java regex库一样好,包括Jakarta ORO (您的"Perl5Util“库)。此外,它同时支持原子组和所有格量词,我发现这两个词对于编写速度极快的正则表达式来说都是非常有价值的。它还支持预编译的正则表达式和捕获组,但我认为所有的库都是如此。
https://stackoverflow.com/questions/190204
复制相似问题