我找不到关于这个主题的任何内容,所以我想知道是否有人比较了不同语言之间正则表达式匹配的速度。我想知道哪种语言可以更快地进行正则表达式评估,因为在我当前的项目中,我需要不断地评估大量的正则表达式。语言的选择主要取决于这种表现。
我的想法是C / C ++自然会更快但我想尽可能避免它,我不确定我是否正确。例如,C#库可能使用具有P / Invoke的本机代码,因此速度差异可能是荒谬的。但是我不知道要选择哪个库,或者我是否需要在C ++库周围创建一个包装器(哪一个?)。
答案 0 :(得分:4)
正则表达式的种是什么?他们会使用诸如前瞻,外观,反向引用,不情愿的量词,原子组,占有量词等等功能吗?
其他响应者已链接到regex-dna benchmark,但它仅使用所有正则表达式风格共享的最基本功能,例如Kleene星(*
)和交替(|
)。因此,虽然GNU C / C ++实现似乎是明显的赢家,但如果您需要我上面列出的任何功能,它们对您没有任何帮助。
另一个考虑因素是Unicode支持。如果您正在处理实际文本(而不是像regex-dna
基准测试那样表示为文本的数据),您应该使用具有良好Unicode支持的正则表达式。
我建议你研究一下C#。 .NET正则表达式的味道并不具有缓慢的声誉(这是关于正则表达式加速IMO的唯一明智之举),对于性能关键型应用程序,它提供了compiling directly to byte code的选项以提高性能
答案 1 :(得分:3)
这里有一个正则表达式基准:http://shootout.alioth.debian.org/u64q/benchmark.php?test=regexdna&lang=all&box=1
但是你要使用的正则表达式的类型可能比你选择的引擎更重要。对于某些类型的某些引擎比其他引擎做得更好,并且无论引擎是什么,某些类型的正则表达式都很慢(例如某些正则表达式需要指数时间)
答案 2 :(得分:0)
我建议在RegExBuddy中评估一个复杂的正则表达式 尝试使用您想要测试的语言。它以毫秒为单位显示速度。相信我,这是一个很棒的工具。
答案 3 :(得分:0)