http://baike.baidu.com/link?url=sLfovpZmIcS5Uz_tiidXoVtjl30Tu3wARMfhnEcbgEGzsb8g1z7dvtGNXTulu1KDodmiuTAP5ODr_R5D2myeeq

零宽断言

1_1、(?=exp)   零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp

1_2、(?<=exp) 零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp

负向零宽

2_1、(?!exp)零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp

2_2、(?<!exp)零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp

举例1

1_1,1_2: (?<=(aa|bb)).+?(?=ing) 匹配以aa或bb开头,ing结束之间的字符

aabbingxxing

匹配结果: 1.bb 2.ingxx

第一次从aabbing匹配出bb,当前匹配到字符串第四个位置,剩下的字符串是ingxxing,

由于(?<=exp)不占宽度,ingxxing前面是bb,连起来就是bbingxxing,所以匹配出ingxx

(注: 以上解释只是个人根据结果推测出来的,说法可能不一定准确,但结果经过测试是正确的,只是方便理解,

aabb1ingxxing 通过这个正则匹配出来的结果是:bb1)

举例2:

2_1,2_2 : (?<!(a1|b2))\\d{1,}?(?!ing)

a1b2ingxxing a844ing cc66dd只有3被过滤掉了,3前面是b2后面是ing

匹配结果: 1,2, 8,4,6,6

Regex titleRegex3 = new Regex("(?<!(a1|b2))\\w{2,}?(?!ing)" );
            String strong3 = "a1b23ingxxinga844ingcc66dd";
            MatchCollection mcs3 = titleRegex3.Matches(strong3);

for (int i = 0; i < mcs3.Count; i++)
            {
                Console.WriteLine(i + "---" + mcs3[i].Value);
            }

匹配结果

0---a1, 1---23i, 2---ng, 3---xxi, 4---ng, 5---a8,

6---44i, 7---ng, 8---cc, 9---66, 10---dd

递归匹配:

  匹配所有div及div中有嵌套的div

<div[^>]*>
      [^<>]*
       ( (
           (?'Open'<div[^>]*>)
           [^<>]*
         )+
         (
           (?'-Open'</div>)
           [^<>]*
         )+
       )*
      (?(Open)(?!))
    </div>

能匹配出

    <div>aa</div>

<div>aa <div> bb <div>cc</div></div></div>

div中包含其他标签的不能匹配出来,如<div>aa<span>bb</span></div>

 

Regex 正则零宽断言的更多相关文章

  1. $python正则表达式系列(5)——零宽断言

    本文主要总结了python正则零宽断言(zero-length-assertion)的一些常用用法. 1. 什么是零宽断言 有时候在使用正则表达式做匹配的时候,我们希望匹配一个字符串,这个字符串的前面 ...

  2. JS不支持正则中的负向零宽断言

    今天在项目中用到了正则表达式,并且需要用负向零宽断言 (?<=exp) 进行筛选,结果运行时报 Invalid group 错,一开始以为是自己很久没用表达式写错了,查阅了一下正则语法后发现并没 ...

  3. 正则 ?<= 和 ?= 用法 以及零宽断言等概念

    正则 ?<=  和 ?= 用法   参考网址:http://baike.baidu.com/link?url=2zORJF9GOjU8AkmuHDLz9cyl9yiL68PdW3frayzLwW ...

  4. js正则:零宽断言

    JavaScript正则表达式零宽断言 var str="abnsdfZL1234nvcncZL123456kjlvjkl"var reg=/ZL(\d{4}|\d{6})(?!\ ...

  5. js正则之零宽断言

    我们学到的正则表达式匹配,都是有“宽度”的,使用 \w+. 匹配下面文本,会将 . 一同匹配: regular. expression. 如果不想匹配符号,只匹配一个位置,就要用到“零宽断言”(匹配宽 ...

  6. grep正则表达的零宽断言

    先看一组神奇的命令 [root@elastix82 tmp]# echo $html111<td>aaa</td>222[root@elastix82 tmp]# [root@ ...

  7. 正则表达式零宽断言详解(?=,?<=,?!,?<!)

    在使用正则表达式时,有时我们需要捕获的内容前后必须是特定内容,但又不捕获这些特定内容的时候,零宽断言就起到作用了 正则表达式零宽断言: 零宽断言是正则表达式中的难点,所以重点从匹配原理方面进行分析.零 ...

  8. 零宽断言 -- Lookahead/Lookahead Positive/Negative

    http://www.vaikan.com/regular-expression-to-match-string-not-containing-a-word/ 经常我们会遇到想找出不包含某个字符串的文 ...

  9. Python爬虫学习(4): python中re模块中的向后引用以及零宽断言

    使用小括号的时候,还有很多特定用途的语法.下面列出了最常用的一些: 表4.常用分组语法 分类 代码/语法 说明 捕获 (exp) 匹配exp,并捕获文本到自动命名的组里 (?<name>e ...

随机推荐

  1. pug学习

    pug学习 jade(pug)由于商标版权问题,jade已经改名为Pug.Pug 是一个高性能的模板引擎,它是用 JavaScript 实现的,并且可以供 Node 使用,当然还支持其他语言. 文件后 ...

  2. 用DECODE进行排序

    DECODE用法: 现定义一table名为output,其中定义两个column分别为monthid(var型)和sale(number型),若sale值=1000时翻译为D,=2000时翻译为C,= ...

  3. centOS不显示ipv4地址的解决办法

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/lx_Frolf/article/deta ...

  4. left join right inner join 区别

    连表查询 select a, b, c from table_a tb_a left (right) join table_b tb_b on tb_a.id = tb_b.id left : tab ...

  5. jQuery基础教程之is()方法和has() 方法

    is()方法 —— 用于筛选 语法: jQueryObject.is( expr )返回值: is()函数的返回值为Boolean类型.true或者false.只要其中至少有一个元素符合给定的表达式就 ...

  6. Java 课程总结

    学到了什么 本学期通过老师的教导与自学,在Java课程具体学到了以下知识: 1.面向对象编程 1.1 类与对象(匿名对象) 类是由方法与属性组成,其定义了一个基本的模板,代表一个共性.其中属性也可以是 ...

  7. Python做个小游戏

    Ps.可去知乎搜索“雨露浅歌”大神,他写的帖子里有详细讲解和源码. 游戏概述.玩法:通过键盘的↑键来控制小球往上走,当松开↑键时,小球以一定速度向下掉,小球每越过一根棒加1000分,越过一个飞镖加20 ...

  8. 关于<a></a>标签里嵌套<a></a>标签的bug

    当你用一个<a></a>标签时,在<a>标签中再插入一个<a></a>,此时,你会发现外面的<a>标签会重复出现,且有点混乱.找 ...

  9. lvm 磁盘扩容

    LVM磁盘管理 一.LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现.LVM将一个或多个硬盘 ...

  10. js 屏蔽网页快捷键代码

    <script> function KeyDown(){ //屏蔽鼠标右键.Ctrl+n.shift+F10.F5刷新.退格键 //alert("ASCII代码是:"+ ...