在使用正则表达式时,有时我们需要捕获的内容前后必须是特定内容,但又不捕获这些特定内容的时候,零宽断言就起到作用了。

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

#匹配后面为_path,结果为product
'product_path'.scan /(product)(?=_path)/
ps:这样_path就不会占用坐标,继续往后扫时 就可以从_继续扫描了
eg:\[(.*?)\](?=(\[|$))
用来匹配下文 ,就能起到框起 [] 要求结束符是][或者 ]$ ,并且 保证每一对儿能命中
 [  logid:616758221  ][  proctime:total:2(ms) queue:0+rev:0+proc:2+write:0  ][  reqip:127.0.0.1  ][  reqsvr:SCS  ][  cmdno:3  ][  svrname:SLS  ][  errno:0  ][    ][  cuid:814367243e397033a1b51d8258c8d660 uid:2108092475 relay_data:{"data":{"p":[{"c":1,"id":339,"p":[[1019,4798],[1019,4798],[1019,4798],[1018,4798],[1018,4798],[1018,4798],[1018,4798],[1018,4798],[1019,4798]],"s":1}],"pgid":0,"pid":2859},"sid":"6178b1b64b587450e856bb44d0ea3fa7","sig_no":30001,"to_cuid":"14C273C39D95B70286E47B26E5370715|553193170527653"} hget_all:[K_DOI:14C273C39D95B70286E47B26E5370715|553193170527653] talk_scs:0(ms)   ][    ]

  


(?<=exp):零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp
#匹配前面为name:,结果为wangfei
'name:wangfei'.scan /(?<=name:)(wangfei)/ #wangfei

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

#匹配后面不是_path
'product_path'.scan /(product)(?!_path)/ #nil
#匹配后面不是_url
'product_path'.scan /(product)(?!_url)/ #product

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

#匹配前面不是name:
'name:angelica'.scan /(?<!name:)(angelica)/ #nil
#匹配前面不是nick_name:
'name:angelica'.scan /(?<!nick_name:)(angelica)/#angelica

 

crawler_正则表达式零宽断言的更多相关文章

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

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

  2. js正则:零宽断言

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

  3. python 正则表达式之零宽断言

    零宽断言:用于查找特定内容之前或之后的内容,但并不包括特定内容本身.对于零宽断言来说,我认为最重要的一个概念是位置,零宽断言用于指定一个位置,这个位置应该满足一定的条件(它附近满足什么表达式),并且这 ...

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

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

  5. Python正则表达式进阶-零宽断言

    1. 什么是零宽断言 有时候在使用正则表达式做匹配的时候,我们希望匹配一个字符串,这个字符串的前面或后面需要是特定的内容,但我们又不想要前面或后面的这个特定的内容,这时候就需要零宽断言的帮助了.所谓零 ...

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

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

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

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

  8. Python-正则零宽断言及命名捕获(类PHP)

    (一)零宽断言 说明:本文的例子使用python描述      首先说明一下什么是零宽断言,所谓零宽断言就是并不去真正的匹配字符串文本,而仅仅是匹配对应的位置.      正则表达式中有很多这样的断言 ...

  9. js正则之零宽断言

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

随机推荐

  1. 微信小程序 富文本插件 循环渲染方式

    感谢GitHub https://github.com/icindy/wxParse/wiki/wxParse%E5%A4%9A%E6%95%B0%E6%8D%AE%E5%BE%AA%E7%8E%AF ...

  2. Html表单中遇到的问题

    原文 https://www.jianshu.com/p/4466b8294007 大纲 1.表单提交的方式GET和POST的区别 2.js无法对input的file类型的值进行赋值 3.js获取in ...

  3. [Javascript] Create scrollable DOM elements with Greensock

    In this lesson, we will look at Greensock's Draggable API. We will implement a scrollable <div> ...

  4. 检测dll是32/64位?(直接读dll文件包含的某几个字节进行判断)

    检查dll是32位还是64位? #include "stdafx.h" #include <Windows.h> int _tmain(int argc, _TCHAR ...

  5. MySQL复制格式小结

    基于语句级的复制 binlog=statement   优点: (1)binlog文件较小. (2)日志是包含用户执行的原始SQL,方便统计和审计. (3)出现最早可binlog.兼容较好. (4)b ...

  6. JavaScript学习笔记八

    本文依据慕课网课程<JavaScript进阶>学习整理 第8章 浏览器对象 8-1 window对象   window对象是BOM的核心.window对象指当前的浏览器窗体.   wind ...

  7. [Ramda] Create a Query String from an Object using Ramda's toPairs function

    In this lesson, we'll use Ramda's toPairs function, along with map, join, concatand compose to creat ...

  8. color2gray 的实现

    无论是 rgb 还是 yuv 等三通道的颜色空间中的像素点,将其转换为单通道(pixel_depth=255.)中的像素,一般情况下都是采用的对原始颜色空间的 3 通道的像素点线性组合而得到单通道的像 ...

  9. cordova使用cordova-plugin-baidumaplocation插件获取定位

    原文:cordova使用cordova-plugin-baidumaplocation插件获取定位 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m ...

  10. e.target e.currenttarget

    概述 当事件穿过 DOM 时,识别事件的当前目标对象(Identifies the current target for the event, as the event traverses the D ...