这更可能取决于个别实现而不是语言本身。例如,某些模式在某些实现中是O(N 2),但在其他实现中是 ~O(N)。具体来说,大多数正则表达式实现都基于非确定有限状态自动机(NFA)。简而言之,这意味着它们可以并且会在某些情况下回溯某些模式。这导致了大约O(N 2)的复杂度。匹配相同模式的确定性有限状态自动机(DFA)永远不会回溯 - 它总是具有线性复杂度。同时,与NFA相比,DFA的编译阶段通常更复杂(并且DFAs没有所有NFA的功能)。因此,对于许多不涉及回溯的简单模式,基于NFA的正则表达式引擎可能比基于DFA的引擎运行得更快。但是,当基于NFA的正则表达式引擎试图匹配涉及回溯的模式时,它可能会(并且会)显着减慢速度。在后一种情况下,基于DFA的引擎可能轻松地快几倍。大多数正则表达式库基本上从表示为字符串的正则表达式开始。当您进行基于正则表达式的搜索/匹配时,大多数将其编译为NFA / DFA的数据结构。该编译步骤需要一些时间(不是很多,但如果您使用许多不同的RE,则可能变得显着)。一些RE引擎(例如Boost XPressive)可以静态地编译正则表达式 - 也就是说,RE与程序源代码同时编译。这可以消除从程序执行时间中编译RE的时间,因此,如果您的代码在编译RE上花费了大量时间,则可以从中获得实质性的改进(但这与静态类型无关 - 至少据我所知,您不能在Java或C中获得相同的结果,例如)。一些其他语言(例如D)提供足够的功能,您几乎肯定可以使用它们做到相同的事情,但我不知道它们是否有可用于计划使用的实际实现。
_re
模块中调用相同的 C 编写函数。 - abarnert