正则表示
从语法到匹配引擎,彻底搞懂正则的细节、边界与陷阱
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
正则表示
从语法到匹配引擎,彻底搞懂正则的细节、边界与陷阱
单一终结状态的NFA
单一终结状态的NFA:定义、要点与典型应用
正则语言的运算性质
前两页我们把正则语言和NFA、正则表达式画上了等号。自然的问题是:拿到两个正则语言,能不能组合出新的正则语言?哪些运算不会让我们「跑出」这个集合?
水(正则语言)在容器内折腾(并、连接、星、补……),永远渗不出去变成「非正则」
正则表示和语言
前页用 ∪、·、* 操作正则语言,但还缺一个核心问题:每个正则表示 r 究竟对应哪个语言集合 L(r)?这一页给出 L 的归纳定义,并揭示正则表示与正则语言的双向等价。
菜谱是文字形式(语法),所有按它做出的菜肴构成对应集合(语义)
正则表示和正则语言
前几页从归纳定义、单一终结状态NFA、运算封闭性几个角度拆解过正则表示和正则语言。这一页把视角收拢:它们到底是什么、如何互相刻画、又用在哪里。
原料=符号、|='换一种'、连接='接着下'、*='重复任意次',一张菜谱描述一桌菜
正则语言的同态
前页讲了正则表示等价于正则语言。那对正则语言做某种'变形'——把每个字母替换成固定串——结果还正则吗?这就是同态要回答的问题。
每个字母有固定译法,整句翻译后语言类别不变
正则表示的代数定律
同态让我们在不同正则语言之间整体切换;想直接在表达式本身上下刀——代数定律登场。
都是用来化简表达式;区别在于连接不交换、并有幂等性
本节要点
- ✓正则表示用∪、·、*三大递归运算定义语言,与有限自动机等价
- ✓从正则表示到单一终结状态NFA的构造是等价性证明的关键
- ✓正则语言对并、连接、星闭包、同态及逆同态均封闭
- ✓代数定律(如分配律、幂等律)可用于证明两表示等价
- ✓易错:∅与ε不同,星闭包必含ε
课后思考
先独立思考,再看参考答案的提示。三题覆盖核心、应用与边界。
参考答案Thompson 构造按语法递归,每个子表达式对应独立'片段',需要自己的起止状态才能拼接,故天然多终结。改造方法是新增唯一终结状态,从所有原终结状态引 ε 弧指向它。
参考答案是同一个集合。L* 中串是 L 中串的拼接,h 保持拼接(h(xy)=h(x)h(y)),所以 h 逐段作用再拼接得到 (h(L))*;反向同理。三行即可证毕。
参考答案标准正则表示(并、连接、Kleene 星)上无条件成立,按语言展开即可。但 r(s+t)* ≠ (rs+rt)*——星号改变结构,分配律不能随意代入带星号的子表达式,例如 ab(c+d)* 与 (abc+abd)* 就不相等。