语言或库之间的正则表达式

时间:2011-02-26 13:10:52

标签: regex libraries

我找不到关于这个主题的任何内容,所以我想知道是否有人比较了不同语言之间正则表达式匹配的速度。我想知道哪种语言可以更快地进行正则表达式评估,因为在我当前的项目中,我需要不断地评估大量的正则表达式。语言的选择主要取决于这种表现。

我的想法是C / C ++自然会更快但我想尽可能避免它,我不确定我是否正确。例如,C#库可能使用具有P / Invoke的本机代码,因此速度差异可能是荒谬的。但是我不知道要选择哪个库,或者我是否需要在C ++库周围创建一个包装器(哪一个?)。

4 个答案:

答案 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)

  

语言的选择将是   主要基于这种表现。

然后您的选择可以归结为choice of regex engine

您的程序是在单核计算机还是多核计算机上运行,​​还是x86或x64?

相关问题