先行断言(lookahead)和后行断言(lookbehind)

简介: 先行断言(lookahead)和后行断言(lookbehind)

正则表达式的先行断言后行断言一共有4种形式

格式 中文名称 英文名称
?=pattern 零宽正向先行断言 zero-width positive lookahead assertion
?!pattern 零宽负向先行断言 zero-width negative lookahead assertion
?<=pattern 零宽正向后行断言 zero-width positive lookbehind assertion
?<!pattern 零宽负向后行断言 zero-width negative lookbehind assertion


名词释义

  • 零宽zero-width
    见文知义, 零宽 表示一种零宽度的匹配,它匹配到的内容不会保存到匹配结果中去,最终匹配结果只是一个位置而已。
  • 正向(positive)和负向(negative)
    不等于( != )、逻辑非( ! )都是用 !号 来表示,所以有 !号 的形式表示不匹配、负向
    !号 换成 =号 ,就表示匹配、正向
  • 先行(lookahead)和后行(lookbehind)
    正则表达式引擎在执行字符串和表达式匹配时,会从头到尾从前到后)连续扫描字符串中的字符,设想有一个扫描指针指向字符边界处并随匹配过程移动。
    先行断言,是当扫描指针位于某处时,引擎会尝试匹配指针还未扫过的字符,先于指针到达该字符,故称为先行
    后行断言,引擎会尝试匹配指针已扫过的字符,后于指针到达该字符,故称为后行


含义

( ?=pattern ) 正向先行断言

代表字符串中的一个位置, 紧接该位置之后 的字符序列 能够匹配pattern


例如对” a regular expression ”这个字符串,要想匹配 regular 中的 re ,但不能匹配 expression 中的 re ,可以用” re(?=gular) ”,该表达式限定了 re 右边的位置,这个位置之后是 gular ,但并不消耗 gular 这些字符,将表达式改为” re(?=gular). ”,将会匹配 reg元字符. 匹配了 g ,括号这一砣匹配了 eg 之间的位置。


( ?!pattern ) 负向先行断言

代表字符串中的一个位置, 紧接该位置之后 的字符序列 不能匹配pattern


例如对” regex represents regular expression ”这个字符串,要想匹配除 regexregular 之外的 re ,可以用” re(?!g) ”,该表达式限定了 re 右边的位置,这个位置后面不是字符 g


负向和正向的区别,就在于该位置之后的字符能否匹配括号中的表达式


( ?<=pattern ) 正向后行断言

代表字符串中的一个位置, 紧接该位置之前 的字符序列 能够匹配pattern


例如对” regex represents regular expression ”这个字符串,有4个单词,要想匹配单词内部的 re ,但不匹配单词开头的 re ,可以用” (?<=\w)re ”,单词内部的 re ,在 re 前面应该是一个单词字符。


之所以叫后行断言,是因为正则表达式引擎在匹配字符串和表达式时,是从前向后逐个扫描字符串中的字符,并判断是否与表达式符合,当在表达式中遇到该断言时,正则表达式引擎需要往字符串前端检测已扫描过的字符,相对于扫描方向是向后的


(?<!pattern) 负向后行断言

代表字符串中的一个位置, 紧接该位置之前 的字符序列 不能匹配pattern。 例如对” regex represents regular expression ”这个字符串,要想匹配单词开头的 re ,可以用” (?<!\w)re ”。单词开头的 re ,在本例中,也就是指不在单词内部的 re ,即 re 前面不是单词字符。当然也可以用” \bre ”来匹配。

目录
相关文章
|
5天前
|
缓存 人工智能 安全
GPT-5.6 Terra与GPT-5.5性能实测:成本减半后的跑分对比与快速迁移指南
GPT-5.6 Terra 的定价为每百万 token 输入 2.50/输出 15。GPT-5.5 则是 5/ 30。Terra 的每一项费率,包括 $0.25/M 的缓存读取,都恰好是 GPT-5.5 的一半,因此在任何工作负载组合下,Terra 都固定 便宜 2.0x。以每天 10 万次请求、3K token 提示词计算,大约是 Terra 每天 2,000,GPT−5.5每天 4,000,即每月约 60,000对 120,000。问题在于:OpenAI 没有发布任何针对 Terra 的编码基准。那个著名的 91.9% Terminal-Bench 数字是 Sol 在 Ul
|
5天前
|
人工智能 缓存 JSON
刚刚 GPT-5.6 发布,吊打 Claude 5 和 Grok 4.5?一手实测来啦!
GPT-5.6 刚发布,跑分号称超越 Fable 5,真的假的?附一手实测,让 3 个最强 AI 编程模型 GPT-5.6 Sol、Claude Fable 5、Grok 4.5 在 Cursor 里同时一把梭开发网页游戏,看看最新模型到底谁更能打。
313 0
|
5天前
|
存储 人工智能 JSON
Qwen 本地部署搭配 ComfyUI 生成 AI 漫剧完整实操指南(小白零基础可落地,零成本无限生成+角色一致性天花板)
2026全网最优本地漫剧流水线:零成本、离线运行、角色统一、低配(8G显卡)可跑。融合Qwen本地大模型+ComfyUI双引擎,实现剧本生成→分镜绘图→动态成片全自动,隐私安全、无审核限流,新手30分钟上手,日更无忧。(239字)
|
28天前
|
Linux 程序员 数据格式
【2026最新】Notepad++下载、安装和使用一篇搞定(附中文版安装包)
Notepad++ 是一款免费开源、轻量高效的 Windows 文本编辑器,支持 C/Python/HTML 等 80+ 语言语法高亮、代码折叠、正则替换、编码转换及插件扩展,专为程序员与文本处理用户打造,完美替代系统记事本。(239字)
|
2天前
|
缓存 UED 开发者
Codex109天重置23次,明天还要再送一次
Codex近109天完成23次额度重置,7月14日将迎来第24次。Tibo高频响应用户反馈:优化GPT-5.6高消耗问题、补发失效福利、调整重置时间——形成“反馈→回应→修复→补偿”正向闭环,彰显以用户为中心的产品哲学。(239字)
424 11