zoukankan      html  css  js  c++  java
  • 正则表达式之正向预查和反向预查

    正向预查:
    1. 正向正预查:(?=)
    例如:
    foo(?=bar)        //匹配后面带有bar的foo
    它可以匹配: foobar, abcfoobar  中的foo
    但是不能匹配:fooabc 中的foo
     
    2. 正向负预查:(?!) 
    例如: 
    foo(?!bar)        //匹配后面不带bar的foo 
    它可以匹配: foo123 
    但是不能匹配:foobar
     

    负向预查 
    1. 负向正预查(?<=) 
    例如: 
    (?<=foo)bar        //匹配前面有foo的bar 
    它可以匹配: foobar, 123foobar  中的bar 
    不可以匹配: 123bar 中的bar
      
    2. 负向负预查(?<!) 
    例如: 
    (?<!foo)bar        //匹配前面没有foo的bar 
    它可以匹配: 123bar 中的bar 
    不可以匹配: foobar, 123foobar  中的bar
     
    预查还可以嵌套 
    例如: 
    (?<=(?<!foo)bar)baz        //匹配一个baz,它前面要有bar,但是bar的前面不可以是foo
     
    它可以匹配 123barbaz   中的baz 
    但是不可以匹配foobarbaz
     
    (?<=d{3}…(?<!999))foo        //匹配一个foo,它前面是三个非999的字符,这三个字符之前是三个数字
     
    它可以匹配123123foo, 111cdefoo, 111c2cfoo  里面的foo
     
    但是不能匹配 123999foo,abcabcfoo 里面的foo
     
    注意:所有的预查都是非获取匹配,不消耗字符。也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

    转载:http://3721myth.blog.163.com/blog/static/31831706201132111234121/

  • 相关阅读:
    UVA-10917 Walk Through the Forest (dijkstra+DP)
    UVA-11374 Airport Express (dijkstra+枚举)
    UVA-11294 Wedding (2-SAT)
    UVALive-3713 Astronauts (2-SAT)
    UVALive-3211 Now or later (2-SAT+二分)
    线程变量
    linux通用双向链表
    排序算法代码
    双向链表
    long与int的区别?(zz)
  • 原文地址:https://www.cnblogs.com/wangyongbin/p/4377039.html
Copyright © 2011-2022 走看看