C / Java中的正则表达式处理速度比Python中的快多少?

杰夫·曼德尔

我正在寻找基准,以比较python和静态类型化语言(例如C,Java或C ++)之间的正则表达式速度。我也想听听Cython对正则表达式的性能。

杰里·科芬

这可能比语言更依赖于个人实现。

仅举例来说,某些模式在某些实现中为O(N 2),而在其他实现中为〜O(N)。具体而言,大多数RE实现都是基于NFA(不确定性有限状态自动机)。长话短说,这意味着他们可以并且在某些情况下会以某些模式回溯。这大致给出了O(N 2)的复杂度。与相同模式匹配的确定性有限状态自动机(DFA)不会回溯-它始终具有线性复杂度。同时,DFA的编译阶段通常比NFA复杂(并且DFA并不具备NFA的全部功能)。

因此,使用许多不涉及任何回溯的简单模式,基于NFA的RE引擎可能比基于DFA的引擎运行起来容易。但是,当基于NFA的RE引擎试图匹配模式而不涉及回溯时,它可能会(并且将会)大大降低速度。在后一种情况下,基于DFA的引擎可能会快很多倍。

大多数RE库基本上都从以字符串表示的正则表达式开始。当您进行基于RE的搜索/匹配时,大多数会将其编译为NFA / DFA的数据结构。该编译步骤需要一些时间(虽然不是很多,但可能会变得很重要,尤其是当您使用许多不同的RE时)。一些RE引擎(例如Boost XPressive)可以静态地编译正则表达式-也就是说,RE与程序的源代码同时编译。这样可以从程序的执行时间中省去编译RE的时间,因此,如果您的代码在编译RE上花费了大量时间,则可以从中获得实质性的改进(但这至少与静态类型无关-至少据我所知,在Java或C或示例中无法获得相同的效果)。其他几种语言(例如

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C / Java中的正则表达式比Python中的正则表达式快多少?

来自分类Dev

在C中解析正则表达式

来自分类Dev

C ++中的正则表达式字符类减法

来自分类Dev

XML中的C#正则表达式标记

来自分类Dev

正则表达式在C#中不匹配

来自分类Dev

C ++ 11中的正则表达式替换

来自分类Dev

C中的正则表达式无法正常工作

来自分类Dev

C#正则表达式中的无效字符

来自分类Dev

用于C中IP地址的正则表达式

来自分类Dev

C#中的正则表达式问题

来自分类Dev

正则表达式不能在C中工作

来自分类Dev

卡在C#中的正则表达式上

来自分类Dev

C ++中的多行正则表达式模式

来自分类Dev

C#中的正则表达式,包括注释

来自分类Dev

C ++中的正则表达式编译错误

来自分类Dev

C中的正则表达式匹配

来自分类Dev

C中的HTTP标头的正则表达式

来自分类Dev

C ++中的STD正则表达式

来自分类Dev

C#中的正则表达式模式问题

来自分类Dev

C#中的正则表达式

来自分类Dev

标准C ++中的正则表达式

来自分类Dev

C ++中的正则表达式问题

来自分类Dev

用于C中IP地址的正则表达式

来自分类Dev

C中的正则表达式无法正常工作

来自分类Dev

C#中的数据注释正则表达式

来自分类Dev

C#正则表达式中的无效字符

来自分类Dev

C#中的正则表达式,包括注释

来自分类Dev

正则表达式替换C#中的标签

来自分类Dev

正则表达式中的C#错误