正则表达式引擎:NFA与DFA的深度剖析
1. NFA引擎的控制优势
在正则表达式导向的匹配中,正则表达式的每个子表达式基本上是独立进行检查的。除了反向引用外,子表达式之间没有其他关联,它们只是组合在一起形成一个更大的表达式。子表达式的布局和正则控制结构(如交替、括号和量词)控制着引擎在匹配过程中的整体移动。
由于正则表达式引导NFA引擎,正则表达式的编写者有很大的机会来精确控制匹配过程。例如,对于 to(nite;knight;night) 这个正则表达式,不同的写法可能会让引擎以不同的方式工作,像下面几种写法:
- to(ni(ght;te)<knight)
- tonite;toknight;tonight
- to(k?night;nite)
这些表达式最终在任何给定文本上的匹配结果是相同的,但会以不同的方式引导引擎。不过,目前我们还无法判断哪种写法更好。
2. DFA引擎:文本导向匹配
与正则表达式导向的NFA引擎不同,DFA引擎在扫描字符串时,会跟踪所有“正在进行的匹配”。以字符串 tonight 为例,当引擎遇到 t 时,会将一个潜在匹配添加到正在进行的匹配列表中:
| 在字符串中 | 在正则表达式中 | 可能的匹配 |
| — | — | — |
| …tonight… | | to(nite;knight;night) |
随着
超级会员免费看
订阅专栏 解锁全文
987

被折叠的 条评论
为什么被折叠?



