美文网首页
关于正则表达式中断言的理解

关于正则表达式中断言的理解

作者: 科科Cole | 来源:发表于2021-07-20 09:35 被阅读0次

关于正则表达式的基础内容,可以先看一下知乎这篇文章你是如何学会正则表达式的?了解里面的基础知识点即可,以及最后的反义部分。

进阶知识点中讲到了断言。关于断言部分,我在网上找了一些资料,但感觉都没有讲特别清楚。这里尝试讲一下自己的理解。如有错误,还请指出。


正则表达式中的断言,也即零宽断言。零宽,指的是断言没有宽度。在正则表达式中,断言指的是一个位置。在一个普通的正则表达式中,比如^\d{10,}$,我们匹配的是一段内容,一个字符串。而在断言中,我们匹配的是一个位置

断言分为四种,分别是正向先行断言(?=pattern),负向先行断言(?!pattern),正向后行断言(?<=pattern),负向后行断言(?<!pattern)。实际上也就是两类:正向负向,与先行后行。

以下部分的a、b指的都是正则表达式(pattern)而不仅仅是普通字符。并且b代表断言的pattern,a代表要匹配的内容pattern

先来说先行后行。先行后行表示要匹配的内容位于断言位置的前面还是后面。简单地说,正向先行断言就是指if (a后面是b) return a(a(?=b))。举个例子,对于一串字符:123abcd321!@#,如果我想匹配符号前的数字321而不是字母前的数字123,可以使用表达式^\d+(?=!@#)$。首先会根据断言去找!@#,因为是先行断言,所以位置位于!@#之前,另外因为是正向断言,所以会去匹配所有位置位于!@#前的一个或多个(+)数字(\d)。

正向负向则代表了是与不是。负向先行断言就可以表示成if (a后面不是b) return a(a(?!b))。

如果是正向后行断言也很好理解,即if (a前面是b) return a((?<=b)a)。负向后行断言则为if (a前面不是b) return a((?<!pattern))。

相关文章

  • 正则表达式中的断言(assertions)

    正则表达式中的断言(assertions) 1、什么是断言? 广义上理解,断言(assertions),从字面上理...

  • 浅谈正则表达式(中)

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

  • 关于正则表达式中断言的理解

    关于正则表达式的基础内容,可以先看一下知乎这篇文章你是如何学会正则表达式的?[https://www.zhihu....

  • python断言

    Q:什么是断言?A:我理解的断言就是一个命题,在程序执行中,命题为真则通过,命题为假则不通过。 关于assert用...

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

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

  • 自学Swift之断言 assertion

    断言概念: 官方概念太无聊,并且冗余... 断言(assertion) 是一个全局函数 断言理解: 我理解的断言(...

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

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

  • 【第八天】jmeter元件详解之断言

    断言组件用来对服务器的响应数据做验证。常用的断言是响应断言,支持正则表达式 1、BeanShell Asserti...

  • Java学习笔记 - 第026天

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

  • 正则表达式断言

    title: 正则表达式断言tags: [正则表达式]date: 2017-11-15 23:55:55 正则表达...

网友评论

      本文标题:关于正则表达式中断言的理解

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