您的位置:首页 > 其它

crawler_正则表达式零宽断言

2017-03-02 16:54 309 查看
在使用正则表达式时,有时我们需要捕获的内容前后必须是特定内容,但又不捕获这些特定内容的时候,零宽断言就起到作用了。(?=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:814367243e397033a1b51d8258c8d660uid:2108092475relay_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[/code]
#匹配前面为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

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: