正则的引擎
正则引擎主要可以分为两大类:一种是DFA,一种是NFA。
NFA表达式主导
DFA文本主导
一般而论,DFA引擎则搜索更快一些。但是NFA以表达式为主导,更容易操纵,因此一般程序员更偏爱NFA引擎!
两种引擎各有所长,而真正的引用则取决与你的需要以及所使用的语言!
是否支持忽略优先量词和分组捕获?
NFA 支持
DFA 不支持
使用DFA引擎的程序主要有:
awk,egrep,flex,lex,MySQL,Procmail等;
使用传统型NFA引擎的程序主要有:
GNU Emacs,Java,ergp,less,more,.NET语言,PCRE library,Perl,PHP,Python,Ruby,sed,vi;
回溯
NFA引擎,最重要的性质就是它依次处理各个自表达式,遇到需要在两个可能成功的可能中进行选择的时候,他会选择其一同时记住另一个,以备稍后可能的需要。
回溯就像是在道路的每个分岔口留下一小堆面包屑。
如果需要在“进行尝试”和“跳过尝试”之间选择,对于匹配优先量词,引擎会优先选择“进行尝试”,而对于忽略优先量词,会选择“跳过尝试”。
距离当前最近储存的选项就是当本地失败强制回溯时返回的。使用的原则是LIFO。
回溯是NFA的灵魂。
示例
ab.*lmn 匹配 abcdefghijklmn
ab.*?lmn 匹配 abcdefghijklmn
ab??c 匹配 abc
Last updated