原文地址:http://www.cnblogs.com/mu-mu/archive/2013/02/06/2893581.html

最近为了对html文件进行源码处理,需要进行正则查找并替换。于是借着这个机会把正则系统地学一下,虽然以前也用过正则,但每次都是临时学一下混过关的。在学习的过程中还是遇到不少问题的,特别是零宽断言(这里还要吐槽下,网上到处都是都复制粘贴的内容,遇到个问题查看了不少重复的东西,汗!!!),所以在这里把自己的理解写下来,方便以后查阅!

零宽度正预测先行断言是什么呢,看msdn上的官方解释定义

(?= 子表达式)

(零宽度正预测先行断言。)仅当子表达式在此位置的右侧匹配时才继续匹配。例如,\w+(?=\d) 与后跟数字的单词匹配,而不与该数字匹配。

经典的例子:某单词以ing结尾,要获取ing前面的内容

var reg = new Regex(@"\w+(?=ing)");
var str = "muing";
Console.WriteLine(reg.Match(str).Value);//返回mu

以上是网上到处可见的例子,到这里或许你明白了,原来就是返回了exp表达式前面的内容。

再看下面的的代码

var reg = new Regex(@"a(?=b)c");
var str = "abc";
Console.WriteLine(reg.IsMatch(str));//返回false

为什么会返回false?

其实msdn官方定义已经说了,只是它说得很官方而已。这里需要我们注意一个关键点:此位置。没错,是位置而不是字符。那么结合官方定义和第一个例子来理解第二个例子:

因为a后面是b,则此时返回了匹配内容a(由第一个例子知道,只返回a不返回exp匹配的内容),此时a(?=b)c中的a(?=b)部分已经解决了,接下来要解决c的匹配问题了,此时匹配c要从字符串abc哪里开始呢,结合官方定义,就知道是从子表达的位置向右开始的,那么就是从b的位置开始,但b又不匹配a(?=b)c剩余部分的c,所以abc就不匹配a(?=b)c了。

那么如果要上面的进行匹配,正则应该如何写呢?

答案是:a(?=b)bc

当然,有人会说直接abc就匹配上了,还要这么折腾吗?当然不用这么折腾,只是为了说明零宽度正预测先行断言到底是怎么一回事?关于其它的零宽断言也是同一原理!

转载于:https://www.cnblogs.com/fcsh820/archive/2013/02/08/2909309.html

(转)正则表达之零宽断言(零宽度正预测先行断言)相关推荐

  1. 零宽断言java_正则表达之零宽断言(零宽度正预测先行断言)

    最近为了对html文件进行源码处理,需要进行正则查找并替换.于是借着这个机会把正则系统地学一下,虽然以前也用过正则,但每次都是临时学一下混过关的.在学习的过程中还是遇到不少问题的,特别是零宽断言(这里 ...

  2. regex 正则表达式零宽度正预测先行断言 and 零宽度正回顾后发断言

    http://www.cnblogs.com/creek/archive/2009/04/04/1429600.html msdn中的描述如下: (?= 子表达式) (零宽度正预测先行断言.) 仅当子 ...

  3. android零宽空格,零宽字符文本水印原理

    最近看到word-wrap源码里面有一个正则,有点迷惑:if (options.cut !== true) { regexString += '([\\s\u200B]+|$)|[^\\s\u200B ...

  4. Regex 正则零宽断言

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

  5. 正则表达式零宽断言详解

    在使用正则表达式时,有时我们需要捕获的内容前后必须是特定内容,但又不捕获这些特定内容的时候,零宽断言就起到作用了. 一.基本概念: 零宽断言正如它的名字一样,是一种零宽度的匹配,它匹配到的内容不会保存 ...

  6. 正则表达式之零宽断言

    介绍: 零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像 \b ^ $ \< \> 这样的锚定作用,用于指定一个位置,这个位置应该满足一定的条件(即断言), ...

  7. php 零宽断言,正则表达式之零宽断言

    介绍: 零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像 \b ^ $ \< \> 这样的锚定作用,用于指定一个位置,这个位置应该满足一定的条件(即断言), ...

  8. 【正则表达式系列】零宽断言

    一:基本概念 零宽断言正如它的名字一样,是一种零宽度的匹配,它匹配到的内容不会保存到匹配结果中去,最终匹配结果只是一个位置而已. 二:用法 1:(?=exp):零宽度正预测先行断言,它断言自身出现的位 ...

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

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

  10. python re零宽断言踩坑 re.error: look-behind requires fixed-width pattern

    python re零宽断言踩坑 在在线的正则校验工具上写了大半天才写出来的表达式,往python里一粘贴复制,代码行飘红,强行运行之后,报错. 表达式: #用单引号替换txt_line中匹配到的双引号 ...

最新文章

  1. 吃瓜腾讯平均月薪7.27万后,微信又出大招
  2. 美国光伏发电市场是否稳定?电池板价格降至40美分/W!
  3. cookie 记住浏览历史
  4. golang map 排序 key value
  5. Java多线程--synchronized修饰普通方法和修饰静态方法的区别
  6. Linux-2.6.20的cs8900驱动分析
  7. 2020年十月下旬,再次更新了自己的linkedin工作经历
  8. OllyDBG反汇编快速找到程序入口一点分析
  9. 文科生必备计算机知识点,文科生计算机知识点调查报告.docx
  10. Thread 类的属性和方法
  11. 清华大学电机学答案_电机学清华大学答案
  12. TVS瞬变抑制二极管选型表
  13. 长江大学计算机科学学院德贵奖学金,关于做好2019年各类奖学金评选的通知
  14. 深度装N卡LINUX驱动 性能怎么样,讲解Deepin 20开源Nouveau和闭源NVIDIA驱动,附装闭源N卡驱动的方法...
  15. 如何将电脑中的文件彻底清除干净
  16. zephyr如何添加pwm支持
  17. 一文读懂Apache Kylin
  18. Mysql相关操作与命令
  19. c语言的标识符可分为哪3种字符,c语言标识符有哪三类?
  20. 使用rufus制作Windows Server 2012 R2 U盘_wentfar·tsao

热门文章

  1. C#-WebForm-文件上传-FileUpload控件
  2. PE格式第四讲,数据目录表之导入表,以及IAT表
  3. linux下的文件结构
  4. [转]VC _T的用途
  5. Css(常用的特殊效果)
  6. MATLAB 设置文件的相对路径
  7. Python中Socket粘包问题的解决
  8. 关于mysql使用命令行时出现Data too long for column的解决方案:
  9. 【NOIp模拟赛】种花
  10. js判断手机横竖屏【转】