正则表达式---零宽断言(五--正向零宽断言)

正向零宽断言:

1:(?=exp)     正向预测先行断言。匹配后面是exp的位置

2:(?<=exp)   正向回顾后发断言。匹配前面是exp的位置

实例演示1:

exp:<div>antzone;   正则:^(?=<)<[^>]+>\w+

图示:

解释:^表示以位置0开始匹配(注意^是零宽符号,但不具备回溯),(?=<)作为正向预测先行断言,它判断0位置后面的必须是‘<’,然后样式<div>antzone开头便是'<',那么符合规则匹配成功。因为(?=<)是零宽,那么判断匹配成功后,它开始回溯到0位置,接着判断规则里的<[^>]+>\w+。因为回到了0位置,则开始又一次判断样式‘<’是否匹配后续规则<[^>]+>\w+,结果匹配成功;然后[^>+]之前没提及,该规则就是匹配除了不是'>'符号以外的任意字符一次或者多次,所以成功匹配到div,然后具体不再详解。

结果:

疑问1:为什么不直接<[^>]+>\w+,结果都是匹配成功的,还要去弄复杂的呢? 

实例演示2:

exp:<div>antzone</div>;   正则:^(?=<)<[^>]+>\w+<[^<]+>$(?<=>)

解释:对于正则^(?=<)<[^>]+>\w+<[^<]+>$(?<=>)前面一部分^(?=<)<[^>]+>\w+不再赘述,后面的<[^<]+>$(?<=>)进行一定阐述。$(?<=>)这个规则就是定位到末尾位置,在该exp里面末尾位置就是第18号位置,然后它意思就是要去匹配这第18号位置前面是'>'符号的位置,如果前面是'>'则匹配位置成功,回溯到第18号位置,然后因为有'$'符号那么就会去逆向匹配,最后与^取得交集获取最终结果。

结果:

 其实用了这两个断言后,会发现:断言就是给出一个限制条件,当判断需要匹配的位置满足断言规则后,那么再从这个位置回来重新匹配exp的内容。

猜你喜欢

转载自blog.csdn.net/qq_40258437/article/details/88320825