前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >正则表达式 引擎分类

正则表达式 引擎分类

原创
作者头像
luoheng
发布2022-08-28 19:44:54
3200
发布2022-08-28 19:44:54
举报
文章被收录于专栏:luoheng

正则表达式分类如下:

引擎类型

程序

DFA

awk, egrep, flex, lex, MySQL

传统型NFA

Java, grep, less, more, Perl, Python

POSIX NFA

mawk, GNU Emacs

DFA/NFA 混合

GNU awk, grep

两条普适规则:

  • 优先选择最左端的匹配结果
  • 标准的匹配量词(*,+,?, {m, n})是匹配优先的

区别

引擎原理

NFA是表达式主导,目标文本的某个字符可能被正则表达式中的不同部分重复检测。

DFA是文本主导,DFA引擎在扫描字符串时,会记录“当前有效”的所有匹配可能,因此目标文本中的每个字符最多只会检查一遍。

编译阶段

在使用正则表达式前,两种引擎都会编译表达式。NFA的编译会快一些,内存使用较少。

匹配速度

传统NFA在匹配失败前,必须尝试正则表达式所有变体。

POSIX NFA必须总是尝试所有正则表达式变体,以找到最长的匹配文本。

DFA对目标文本中的每个字符最多只检查一次,匹配速度极快。

匹配结果

DFA和POSIX NFA返回最左最长的匹配文本,传统NFA可能返回其他结果。

匹配能力

NFA提供一些DFA不支持的功能:

  • 捕获括号内的子表达式文本,并支持反向引用
  • 环视
  • 忽略优先两次,以及有序的多选结构(DFA总是返回最左最长匹配)
  • 占有优先量词
  • 固化分组

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 区别
    • 引擎原理
      • 编译阶段
        • 匹配速度
          • 匹配结果
            • 匹配能力
            相关产品与服务
            云数据库 MySQL
            腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档