正则表达式处理中的回溯与贪婪性解析
1. 回溯与贪婪性基础
在使用基于 NFA 正则表达式导向的回溯引擎的工具时,理解回溯在正则表达式中的工作原理是编写高效且符合需求的正则表达式的关键。之前我们已经了解了 ? 的贪婪性和 ?? 的懒惰性,现在来看看 * 和 + 及其回溯机制。
将 x+ 近似看作 x?x?x?x?x?x?… (更准确地说是 (x(x(x(x…?)?)?)?)? ),它的工作方式与我们之前看到的类似。在检查由 * 限定的项目之前,引擎会保存一个状态,表明如果检查失败(或导致失败),匹配可以从 * 之后继续。这个过程会不断重复,直到通过 * 的尝试真正失败。
例如,当用 [0-9]+ 匹配 a 1234 num 时,当 [0-9] 无法匹配 4 后面的空格时,会有四个保存的状态,对应 + 可以回溯的位置:
a 1234 num
a 1234 num
a 1234 num
a 1234 num
这些状态表示 [0-9] 在每个位置的尝试都是可选的。当 [0-9] 无法匹配空格
超级会员免费看
订阅专栏 解锁全文
45

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



