zoukankan      html  css  js  c++  java
  • crawler_正则表达式零宽断言

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

    (?=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

     

  • 相关阅读:
    Dart语言概览
    Flutter开发环境配置(MAC版)
    Jetpack系列:Paging组件帮你解决分页加载实现的痛苦
    Jetpack系列:应用内导航的正确使用方法
    Jetpack系列:LiveData入门级使用方法
    在Android平台使用SNPE应链接libc++库
    Android binder流程简图
    使用Visual Studio Code进行远程开发
    用clock()函数计时的坑
    OpenCV Mat格式存储YUV图像
  • 原文地址:https://www.cnblogs.com/cphmvp/p/6491462.html
Copyright © 2011-2022 走看看