What's the technical reason for "lookbehind assertion MUST be fixed length" in regex?
What's the technical reason for "lookbehind assertion MUST be fixed length" in regex?
回答1
Lookahead and lookbehind aren't nearly as similar as their names imply. The lookahead expression works exactly the same as it would if it were a standalone regex, except it's anchored at the current match position and it doesn't consume what it matches.
Lookbehind is a whole different story. Starting at the current match position, it steps backward through the text one character at a time, attempting to match its expression at each position. In cases where no match is possible, the lookbehind has to go all the way to the beginning of the text (one character at a time, remember) before it gives up. Compare that to the lookahead expression, which gets applied exactly once.
This is a gross oversimplification, of course, and not all flavors work that way, but you get the idea. The way lookbehinds are applied is fundamentally different from (and much, much less efficient than) the way lookaheads are applied. It only makes sense to put a limit on how far back the lookbehind has to look.
回答2
First of all, this isn't true for all regular expression libraries (like .NET).
For PCRE, the reason appears to be:
The implementation of lookbehind assertions is, for each alternative, to temporarily move the current position back by the fixed width and then try to match.
(at least, according to http://www.autoitscript.com/autoit3/pcrepattern.html).
https://regex101.com/ 这个网站flavor设置为ECMAScript,就支持(?<=.*a),但是PCRE,PCRE2,Java都不支持
作者:Chuck Lu GitHub |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2016-11-04 DevExpress中使用DocumentManager,并确保不重复
2016-11-04 DevExpress所有的窗体,使用同一款皮肤
2015-11-04 error: dst ref refs/heads/zhCN_v0.13.1 receives from more than one src.