正则表达式分类如下:
引擎类型 | 程序 |
---|---|
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 删除。