精通正则表达式五:NFA与DFA

定义

NFA与DFA是正则表达式引擎所使用的两种基本技术:

NFA:非确定型有穷自动机
DFA:确定型有穷自动机

作者用用电动机来比喻DFA,用汽油机来比喻NFA,他们确实有许多相似之处:
1.汽油机的历史更长,NFA的历史也比DFA长
2.汽油机应用更加广泛,NFA的应用也比DFA更加广泛
3.汽油机可分为达到加利福尼亚州的尾气排放标准(更严格)和没有达到两种,NFA也分为POSIX NFA和传统型NFA,POSIX NFA是为了规范正在表达式的使用,也是一种新标准。
因此,正则表达式的引擎实际上可以分为三种:

DFA
传统型NFA
POSIX NFA

还有一类特殊的的引擎类型,就是DFA与NFA混合,如:
GNU grep/egrep、Tcl、GUN awk。
我们所使用的许多语言都是用的传统型NFA,比如Java、Perl、Python、PHP、Ruby等。

测试引擎类型

有时候并不知道我们使用的工具是那种类型,可以用几个测试用的表达式来分辨引擎的类型
1.看是否支持忽略优先量词,如果支持,基本就能确定是传统型NFA:

用正则表达式:nfa|nfa not 来匹配字符串 nfa not,如果匹配结果是nfa,就是传统型NFA

2.如果第一步不匹配,再试捕获型括号,DFA不支持捕获型括号和回溯,当然,也可能会遇到同时使用两种引擎的混合系统,在这种系统中,如果没有使用捕获型括

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值