美文网首页
正则表达式的零宽断言——最易懂的解释!

正则表达式的零宽断言——最易懂的解释!

作者: 天下第九九八十一 | 来源:发表于2020-09-07 14:37 被阅读0次

以非贪婪模式,匹配一断由首尾包起来的文本:

首(.*?)尾

那么,怎么再给括号内匹配的文本加首尾限制呢?比如,一定要M开头,Z结尾?答案是使用零宽断言:

首(?=[Mm])(.*?)(?=<[Zz])尾

解释:

首(零宽断言1,指向中间括号内→)(组#1表达式)(←零宽断言2,指向中间括号内)尾

括号包起来的,组#1仍然是组#1,而组#0代表首……尾的全部内容。

零宽断言组成部分:

  • ( ? 括号问号,开启零宽断言

  • (?< 小于号,代表限制断言左←边的字符,不加,则默认代表限制右边的字符。

  • (?<= 等于号,代表是,筛选得与断言相匹配的结果。

  • (?<! 感叹号,代表非,剔除掉与断言相匹配的结果。

  • (?<!表达式) 断言的正则表达式。

最后来一个好玩的“套娃”,零宽断言中套零宽断言!

匹配双引号括起来的文本,其中双引号前不能是斜杠\,除非斜杠前还是斜杆:

".*?(?<!((?<![\\])[\\]))"

( 简便起见只限制第二个双引号。)

拆解:

  • ".*?" 匹配文本

  • ".*?(?<![\\])" 限制第二个双引号前,不能是[\\]

  • [\\] --->((?<![\\])[\\])) 在断言的正则表达式中再次嵌套零宽断言

  • ".*?(?<! ((?<![\\])[\\])) "

相关文章

  • Java学习笔记 - 第026天

    每日要点 正则表达式 例子1:零宽正向先行断言、零宽负向先行断言、零宽正向后行断言、零宽负向后行断言 异常 自定义...

  • 正则表达式的零宽断言——最易懂的解释!

    以非贪婪模式,匹配一断由首尾包起来的文本: 首(.*?)尾 那么,怎么再给括号内匹配的文本加首尾限制呢?比如,一定...

  • CocosCreator3.x开发笔记8: Invalid re

    在iOS下运行报错,是因为正则不支持 因为ios不支持零宽断言 什么是零宽断言? 粗略总结:零宽断言是正则表达式中...

  • 浅谈正则表达式(中)

    本节我们继续接着浅谈正则表达式(上)来讲正则表达式的其他使用。 零宽断言 断言:俗话的断言就是“我断定什么什么”,...

  • 正则表达式 学习

    参考:正则表达式30分钟入门教程 元字符 字符转义 分枝条件 分组 向后引用 零宽断言 负向零宽断言 贪婪和懒惰 ...

  • 正则表达式的先行断言(lookahead)和后行断言(lookb

    正则表达式的先行断言和后行断言一共有4种形式:(?=pattern) 零宽正向先行断言(zero-width po...

  • 零宽断言

    零宽度正预测先行断言 格式:(? = exp )解释: ? 是待处理的字符串 ?后面能匹配表达式 例子? 表达...

  • 零宽断言

    今天我们来讲一下正则 零宽断言还有其他的名称,例如"环视"或者"预搜索","预查" 等等 作用: 作用是给指定位置...

  • 爬虫实战1.6.1 了解零宽断言

    本文转载:静觅 » 正则表达式中零宽断言的用法 了解了正则表达式,想必一般情况下的匹配都不会出现什么问题,但是如果...

  • 正则表达式-零宽断言

    零宽 零宽说的是这个表达式不匹配任何字符,只匹配一个位置 断言 我要匹配的字符串一定要满足这个条件 一下采用pyt...

网友评论

      本文标题:正则表达式的零宽断言——最易懂的解释!

      本文链接:https://www.haomeiwen.com/subject/nzakektx.html