![a03f2c76ec10a17a0def15f1cd209ed1.png](https://i-blog.csdnimg.cn/blog_migrate/b836faeaa41789110b4c913c2b1cff6a.jpeg)
书接上文,上回说道NFA已经可以完全描述正则语言的全部内容。那么,我们在这一章探索一下一个比较复杂的正则表达式在用NFA做匹配的时候会有什么“不足“。
NFA匹配的"不足"
为了言之有物,不妨设要讨论的模式为d?(c(a|b)*)*(b|c+)
![3ad18835b301abd090936af2bab89a20.png](https://i-blog.csdnimg.cn/blog_migrate/2071286ddc594273a3d0f319f08c31d4.png)
图1-1
效率
从上图可以明确的看到存在大量的ℇ
转换。这些ℇ
转换在程序实现的时候就对应了大量的回溯入口,即决策点。那么很显然,这个时候一定存在大量的递归回溯调用,自然也就必然会需要
大量时间来执行。
ℇ
转换冗余
究其原因,无非就是冗余状态太多了
冗余 ≠ 无用
这些看似冗余的转换实际上对分组捕获非常有用,因为在分组捕获时,这些回溯可以记录当前匹配的状态还有剩余输入信息等。但是,如果我们不用分组捕获,只是要求模式全称匹配,则这些转换就是冗余的,我们需要通过