理解计算篇--正则表达式转NFA--理论部分

  • 空正则表达式转NFA
  • 单字符正则表达式转NFA
  • 拼接正则表达式转NFA
  • 选择正则表达式转NFA
  • 重复正则表达式转NFA

正则表达式转NFA--实战部分

空正则表达式转NFA

转换步骤:

  • 构建1个只有1个状态的NFA
  • 起始状态也是接受状态
  • 没有规则,即规则集为空

单字符正则表达式转NFA

转换步骤:

  • 构建1个有2个状态的NFA
  • 第一个状态为起始状态,第二个状态为接受状态
  • 规则集只有1条规则,当 NFA 处于起始状态,且当前读到的字符等于该正则表达式中的字符时,它会转换到接受状态。

拼接正则表达式转NFA

转换步骤:构建一个新的 NFA

  • 新NFA的起始状态为第一个NFA的起始状态
  • 新NFA的接受状态集为第二个NFA的接受状态集相同
  • 新NFA的规则集包含第一个NFA的所有规则以及第二个NFA的所有规则的并集
  • 添加自由移动规则,将第一个 NFA 的每一个旧接受状态连接到第二个 NFA 的旧起始状态

请注意:

  • 隐含的改变: 在连接后,第一个 NFA 原来的接受状态在新构建的 NFA 中不再是最终的接受状态
  • 无新增状态
  • 有新增规则

选择正则表达式转NFA

转换步骤:构建一个新的NFA

  • 新 NFA 的起始状态为一个新建的起始状态
  • 新 NFA 的接受状态包含两个NFA的接受状态的并集
  • 新 NFA 的规则包含两个NFA的规则的并集
  • 新增两条额外的自由移动规则:将新的起始状态连接到两个NFA的旧起始状态

请注意:

  • 有新增状态,有新增规则

重复正则表达式转NFA

转换步骤:构建一个新的NFA

  • 新NFA的起始状态为一个新建的状态,同时也是一个接受状态。
  • 新NFA的接受状态包含旧NFA的接受状态
  • 新NFA的规则包含旧NFA的规则
  • 添加一些额外的自由移动规则,将每个旧NFA的接受状态连接到它的旧起始状态
  • 添加一条自由移动规则,将新的起始状态连接到旧起始状态

请注意:

  • 有新增状态,有新增规则

示例

(a|b)*a(a|b)

相关推荐
雨中飘荡的记忆13 小时前
正则表达式入门到实战
正则表达式
长城20248 天前
HTML5中表单的pattern属性解析
前端·正则表达式·html·html5·pattern·pattern属性·pattern正则表达式
Gss7778 天前
Linux 正则表达式详解(基础 + 扩展 + 实操)
linux·运维·正则表达式
黑客思维者8 天前
正则表达式(九)网络安全:检测SQL注入攻击 + 检测XSS跨站脚本 + 扫描敏感信息泄露 + 匹配暴力破解异常IP
sql·web安全·正则表达式
黎雁·泠崖8 天前
Java常用类核心详解(七):正则表达式 Regex 从入门到实战
java·开发语言·正则表达式
秀儿还能再秀8 天前
正则表达式核心语法 + Python的 re 库中常用方法
python·正则表达式
xcLeigh8 天前
Python入门:Python3 正则表达式全面学习教程
python·学习·正则表达式·教程·python3
数据知道9 天前
MongoDB 正则表达式查询:在 MongoDB 中实现模糊搜索与索引优化陷阱
数据库·mongodb·正则表达式
A懿轩A9 天前
【Java 基础编程】Java 正则表达式实战:Pattern/Matcher、元字符与常用正则,验证与提取必备
java·开发语言·正则表达式
石牌桥网管9 天前
正则表达式:匹配不包含指定字符串的文本
java·javascript·python·正则表达式·go·php