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

     

  • 相关阅读:
    15.Git版本控制系统
    14.sudo 获取root权限
    13.定时任务
    12.文件权限:RWX
    相信301跳转大家都知道 rewrite
    修改mysql密码
    mod_rewrite是Apache的一个非常强大的功能
    mysql 常用命令集锦[绝对精华]
    mysql安装完之后,登陆后发现只有两个数据库
    mysql命令
  • 原文地址:https://www.cnblogs.com/cphmvp/p/6491462.html
Copyright © 2011-2022 走看看