美文网首页
正则表达式断言

正则表达式断言

作者: 张钻研 | 来源:发表于2017-07-16 15:18 被阅读0次

需求

在使用正则表达式做白名单的过程中,碰到下面的需求

匹配http://www.example.com 底下所有除了http://www.example.com/user/开头的所有的url
比如

  1. http://www.example.com/photos/detail.html匹配
  2. http://www.example.com/user/user.html不匹配

这时候就需要用到正则表达式的断言。 断言是在遍历字符串进行正则匹配的过程中,会在当前字符串先进行断言正则的匹配,然后根据匹配结果再决定是否继续正则表达式的匹配

断言

断言Assertion分为4种类型

  1. Look Ahead Positive Assertion
  1. Look Ahead Negative Assertion
  2. Look Behind Positive Assertion
  3. Look Behind Negative Assertion

前向断言Look Ahead指的是断言正则拿当前位置之后的字符串进行比较,后向断言Look Behind拿当前位置之前的字符串进行比较。Positive指的是如果断言匹配成功, 则继续匹配过程, Negative则相反, 如果断言匹配成功,则中断匹配。
这4种断言,以下面字符串开始为标记

  1. Look Ahead Positive Assertion: ?=
  1. Look Ahead Negative Assertion: ?!
  2. Look Behind Positive Assertion: ?<=
  3. Look Behind Negative Assertion:?<!

一般会放在把断言放在一个括号中, 比如grey(?=hound), 断言(?=hound), 正则表达式是grey,但由于断言的存在只有grey后面跟着hound才会匹配

例子

对上面的需求,我们可以写成如下简单的正则进行匹配

http://www.example.com/(?!=user/).*

真正的正则表达式是http://www.example.com/.*, 但当遍历到 http://www.example.com/ 的时候,它会拿下面的字符串先进行断言匹配,如果成功则不继续。 http://www.example.com/user/user.html 虽然符合正则表达式,但在遍历到 http://www.example.com/ 的时候, 它的断言正则匹配重构,则整个匹配中断,匹配返回false

参考

  1. https://docs.racket-lang.org/guide/Looking_Ahead_and_Behind.html
  2. http://help.qualaroo.com/hc/en-us/articles/201541217-Excluding-URLs-Focusing-on-specific-URLs-Negative-and-Positive-Lookaheads

相关文章

  • 浅谈正则表达式(中)

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

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

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

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

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

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

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

  • Java学习笔记 - 第026天

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

  • 正则表达式断言

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

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

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

  • 正则表达式 学习

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

  • 2018-05-18

    函数绑定器 静态断言 内联 CPP转义字符 正则表达式 //regex_match //判断匹配//rege...

  • 正则表达式断言

    需求 在使用正则表达式做白名单的过程中,碰到下面的需求 匹配http://www.example.com 底下所有...

网友评论

      本文标题:正则表达式断言

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