java正则和python正则差距,在C/Java中处理正则表达式比在Python中快多少?

这可能更多地依赖于单个实现而不是语言。在

例如,某些模式在某些实现中是O(N2),而在其他实现中则是~O(N)。具体地说,大多数重新实现都是基于NFAs(非确定性有限状态自动机)的。长话短说,这意味着他们可以而且将在某些情况下用某些模式回溯。这就产生了大约O(N2)的复杂性。与同一模式匹配的确定性有限状态自动机(DFA)从不回溯它总是具有线性复杂度。同时,DFA的编译阶段通常比NFA复杂(而且DFA并不具备NFA的所有功能)。在

因此,对于许多不涉及回溯的简单模式,基于NFA的RE引擎可能很容易比基于DFA的引擎运行得更快。但是,当基于NFA的RE-engine试图匹配一个不涉及回溯的模式时,它可以(并且将)急剧减速。在后一种情况下,基于DFA的引擎可以轻松地快很多倍。在

大多数RE库基本上都是从以字符串表示的正则表达式开始的。当您进行基于RE的搜索/匹配时,大多数人将其编译为NFA/DFA的数据结构。这个编译步骤需要一些时间(不是很大的量,但可能会变得非常重要,特别是当您使用许多不同的REs时)。一些RE引擎(例如boostxpressive)可以静态地编译正则表达式,也就是说,RE与程序的源代码同时编译。这可以从程序的执行时间中消除编译RE的时间,因此,如果您的代码花费大量时间在编译REs上,它可能会从中获得实质性的改进(但这与静态类型无关,至少据我所知,在Java或C或example中无法获得相同的结果)。其他一些语言(例如D)提供了足够的功能,您几乎可以肯定地对它们做同样的事情,但是我不知道您现在可以计划使用它们的实际实现。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值