close

6.正向与反向预查

        "Swift1 Swift2 Swift3Swift4Swift4Swift4"

        (Swift4)        匹配Swift4并获取这一匹配,然后存储供以后使用;

        (Swift4)\1    匹配Swift4Swift4,其中\1即表示使用了存储的匹配(存储的第一个匹配),相当于匹配两次Swift4;

        (Swift3)(Swift4)\2       匹配Swift3Swift4Swift4,其中\2即表示使用了存储的第二个匹配,即Swift4(当然第一个匹配为:Swift3);

        (?:Swift3)(Swift4)\1    匹配Swift3Swift4Swift4,与(Swift3)(Swift4)\2相同;

由于在小括号中使用了?:,所以第一个匹配(Swift3)没有被存储,只存储了后面的第二个匹配(Swift4);

若写成(?:Swift3)(Swift4)\2,则正则表达式错误,因为没有存储第二个匹配;

其中”?:”的作用是匹配Swift3模式字符串,但不会存储该匹配.

 

        Swift(?=4)      匹配右边紧跟着4的Swift;

其中(?=)称为:正向预查匹配, (?=4)表示先看看有没有4,如果有,则把4左边的Swift匹配出来;如果没有,则继续向右查看,这个过程就是正向预查匹配.

        Swift(?!4)       匹配右边不跟着4的Swift;

其中(?!)称为:正向预查不匹配, (?!4)表示先看看有没有4,如果没有,也即不等于4的情况,则把左边的Swift匹配出来;如果有,则继续向右查看,这个过程就是正向预查不匹配.

 

        (?<=4)Swift    匹配左边紧跟着4的Swift,即第五个Swift单词,索引为26到30的字符;

其中(?<=)称为:反向预查匹配, (?<=4)表示先看看有没有4,如果有,则把4右边的Swift匹配出来;如果没有,则继续向右查看,这个过程就是反向预查匹配.

        (?<!4)Swift    匹配左边不跟着4的Swift,即第1、2、3、4、6个Swift单词;

其中(?<!)称为:反向预查不匹配, (?<!4)表示先看看有没有4,如果没有,也即不等于4的情况,则把右边的Swift匹配出来;如果有,则继续向右查看,这个过程就是反向预查不匹配.

 

https://www.jianshu.com/p/6c057350e7c8

 

 

 

 

demo

 

1.text: abc5   abc7

capture:abc

abc(?!4)

2.

text abc4

capture:abc

abc(?=4)  

 

3.

text  4abc

capture: abc

(?<=4)abc

 

4.text zabc dabc

capture abc 

(?<!4)abc   

 

5.

(?:s)bc(e) 意思是用/1 /2取括號的東西不包含(?:s)這個

 

 

arrow
arrow
    全站熱搜

    學習程式 發表在 痞客邦 留言(0) 人氣()