我今天阅读了关于两种不同正则表达式算法的this article。
根据the article的说法,旧的Unix工具,如ed、sed、grep、egrep、awk和lex,都在它们的常规表达式中使用所谓的Thompson NFA算法……
然而,Java、Perl、PHP和Python等较新的工具都对它们的正则表达式使用了不同的算法,这些算法要慢得多。
This article根本没有提到Javascript的regex算法(是的,我知道有各种各样的JS引擎),但我想知道是否有人知道他们使用的是哪种算法,以及这些算法是否应该换成Thompson NFA。
发布于 2009-04-08 09:38:17
尽管ECMA标准没有指定ECMAScript实现应该使用的算法,但该标准要求ECMAScript正则表达式必须支持反向引用(\1、\2等)。排除DFA和"Thompson NFA“实现。
发布于 2009-04-07 21:04:21
Perl使用了记忆递归回溯搜索,并且在5.10中的一些改进中,不再在perl -e '("a" x 100000) =~ /^(ab?)*$/;'上失败。在我最近在OS机器上执行的测试中,Perl5.10的性能优于awk,即使在awk的算法被认为更好的情况下也是如此。
https://stackoverflow.com/questions/727565
复制相似问题