正则表达式分类如下:
引擎类型 | 程序 |
---|---|
DFA | awk, egrep, flex, lex, MySQL |
传统型NFA | Java, grep, less, more, Perl, Python |
POSIX NFA | mawk, GNU Emacs |
DFA/NFA 混合 | GNU awk, grep |
两条普适规则:
NFA是表达式主导,目标文本的某个字符可能被正则表达式中的不同部分重复检测。
DFA是文本主导,DFA引擎在扫描字符串时,会记录“当前有效”的所有匹配可能,因此目标文本中的每个字符最多只会检查一遍。
在使用正则表达式前,两种引擎都会编译表达式。NFA的编译会快一些,内存使用较少。
传统NFA在匹配失败前,必须尝试正则表达式所有变体。
POSIX NFA必须总是尝试所有正则表达式变体,以找到最长的匹配文本。
DFA对目标文本中的每个字符最多只检查一次,匹配速度极快。
DFA和POSIX NFA返回最左最长的匹配文本,传统NFA可能返回其他结果。
NFA提供一些DFA不支持的功能:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有