[翻译]正则引擎的几种分类
原文链接 http://www.softec.lu/site/RegularExpressions/RegularExpressionEngines 正则表达式引擎是正则表达式匹配算法的基础。其有多种不同的实现,但大多数都是基于Henry Spencer的NFA引擎。 正则引擎有两个大分类,DFA和NFA,像Perl、Java、.Net、 PHP 、Python、Ruby……等大多是工具都是用了NFA引擎。少数广泛被使用的工具如 mawk 使用了POSIX NFA引擎(NFA的一种变种)。以高效著称的工具采用了更为高效的DFA引擎。诸如GNU awk,GNU egrep和Tcl之类的一些工具结合了NFA / DFA两种引擎,将两者的优点结合在一起。 基于不同类型引擎的实现的正则表达式,主要有以下几点差异。 语法 匹配内容 零宽断言(环视) 功能 捕获功能 性能 所有的引擎都会对文本做从左向右的最长匹配,但具体细节取决于使用了何种引擎。 传统的NFA引擎 NFA引擎中使用的非确定有限状态机(Nondeterministic finite automation)是一种由要匹配的表达式驱动的算法。这使得正则表达式像一个小的编程语言一样,可控制引擎在匹配失败时候的行为。 正则引擎从正则表达式其实位置开始,尝试正则表达式与文本的开头进行匹配,如果匹配成功,都前进一个配置