知识卡片
懒惰也会回溯
内容
忽略优先量词先尝试少匹配,但失败时仍会逐步扩张并回溯。它改变的是尝试顺序,不自动带来高性能。发散:把 .*? 当成万能优化,往往只是把问题推迟到后续失败路径。
参考来源
- 位置:第4章《表达式的匹配原理》「忽略优先量词」小节(源文件:_epub-src/text/part0009_split_005.html)
- 结论依据:原文说明忽略优先量词首先选择忽略、不匹配,但若后续失败仍会逐步扩张尝试匹配(如「.*?」重复尝试8次才成功),直接支持卡片对懒惰量词只是改变尝试顺序、失败时仍会回溯扩张的论述。
- 原始内容:"因为??是忽略优先的,它会首先尝试忽略,但是,为了能够从失败的分支中恢复,引擎会保存下面的状态……它的匹配尝试是步步为营的,先用点号来匹配……在这个过程重复8次之后,「.*?」最终匹配了Billions。"