正则表达式回溯机制与贪婪性深度解析
1. 回溯机制的形象类比
回溯机制就像在道路的每个岔口留下一堆面包屑。当你选择的路径是死胡同时,你可以沿着原路返回,直到遇到一堆面包屑,它指示着一条未尝试过的路径。如果这条新路径也是死路,你可以继续回溯到下一堆面包屑,如此反复,直到找到通往目标的路径,或者耗尽所有未尝试的路径。
在正则表达式引擎中,有很多情况需要在两个或多个选项之间做出选择。例如,当遇到 ...x?... 时,引擎必须决定是否尝试匹配 x ;而遇到 ...x+... 时,引擎至少要尝试匹配一次 x ,因为 + 要求至少匹配一次。每次做出决策时,引擎都会留下一个虚拟的“面包屑堆”,提醒自己还有另一个选项(匹配或不匹配)在该点仍然可行。
2. 一个简单的回溯示例
以正则表达式 to(nite;knight;night) 匹配字符串 hot tonic tonight! 为例:
- 从字符串开头尝试匹配 t ,失败,引擎移动到第二个位置重试,仍然失败,再移动到第三个位置, t 匹配成功,但后续的 o 匹配空格失败,整个尝试失败。
- 当尝试从 tonic 开始匹配时, to 匹配成功后,有三个可选的分支。引擎先选择 nite 尝试,在匹配到 t
超级会员免费看
订阅专栏 解锁全文
178

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



