正则表达式-零宽断言学习笔记

正则表达式的强大之处也不需要我多说了,数据采集中使用的最多. 学点基本的正则语法,完全足够在工作中使用了.
不过工作归工作,修炼还是要的. 那么今天就学习了下零宽断言的使用,以及记录一下笔记.

零宽断言是正则表达式中的一种方法,又称"环视".
断言用来声音一个应该为真的事实.在正则中只有当断言为真时才会继续进行匹配.
零宽断言和非捕获模式一样(?:)只匹配内容,不捕获内容,即不属于分组内容.
来看看零宽断言(环视)的几种:

顺序肯定环视(?=exp)
零宽度正预测先行断言,又称顺序肯定环视,断言自身出现位置的后面能匹配表达式EXP.
书本上理论总是让人一脸懵逼还是用代码来说话吧.

正则规则如下:
regular:\w+(?=ing)
text: dancing,singing
result:danc,sing
这条正则断言了在符合\w+的规则之后一定会有ing字符串的字符串才是被匹配到的.但是ing不在捕获范围内,所以只匹配到danc和sing.途中高亮的字符串就是匹配到结果

1.jpg

上面那个还是挺好理解的.我们来看下一个

逆序肯定环视(?<=exp)
零宽度正回顾后发断言,又称逆序肯定环视,断言自身出现位置的前面能匹配表达式exp.

regular:(?<=test)regular
text:testregular,regular
result:这里只匹配到testregular中的regular,但是不匹配单独的regular
在regular表达式之前,如果匹配了断言中的test,那么该字符串才会被匹配捕获到.和上面一样,逆序肯定环视中的规则也不在分组匹配范围内,只起到匹配内容不捕获的效果.

2.jpg


2016年12月11日21:36:51

昨天学习了顺逆序肯定环视,今天来学习下顺逆序否定环视.

顺序否定环视 (?!exp)
零宽度负预测先行断言,又称顺序否定环视.断言自身位置出现的后面不能匹配exp表达式.

regular:<a\s?(?:href|class)=".*?">(?!首页).*?</a>
text:
<a href="http://blog.maskerphp.cc/">首页</a>
<a href="http://blog.maskerphp.cc/index.php/friends.html" title="  友情链接">  友情链接</a>
<a class="current" href="http://blog.maskerphp.cc/index.php/about.html" title="关于我">关于我</a>
result:
Match 1:	<a href="http://blog.maskerphp.cc/index.php/friends.html" title="  友情链接">  友情链接</a>
Match 2:	<a class="current" href="http://blog.maskerphp.cc/index.php/about.html" title="关于我">关于我</a>

这个表达起来有点难,可能是因为我的表达能力不好.但是理解很容易,就是和顺序肯定环视是相反的,顺序肯定环视是自身位置出现的后面的字符串能和exp表达式匹配,顺序否定环视则相反.上面的例子就可以说明了,不和"首页"二字匹配的,有两条记录.来看个图
3.jpg

逆序否定环视(?<!exp)
零宽度负回顾后发断言,又称逆序否定环视.断言此位置的前面不能和exp表达式匹配.

既然理解了前面三个,那么理解这一个也不难. 和顺序否定环视一样,也是和逆序否定环视相反.也可以理解为此位置出现的前面不与表达式exp匹配.
regular:(?<!test1)<a\s?(?:href|class)=".*?">.*?</a>
text:
test1<a href="http://blog.maskerphp.cc/">首页</a>
test2<a href="http://blog.maskerphp.cc/index.php/friends.html" title="  友情链接">  友情链接</a>
result:
Match 1:	<a href="http://blog.maskerphp.cc/index.php/friends.html" title="  友情链接">  友情链接</a>	

只匹配到了前面的字符串不能和'test1'匹配成功的一行字符串.其实用心去理解很快就理解了,我也要提高下表达能力..总感觉我表达的文字,很拗口.
4.jpg

PS:顺逆序肯定环视/顺逆序否定环视中的表达式都不在捕获范围内,只是起到一个匹配验证的作用.


2016年12月12日22:58:24 end

posted @ 2018-04-22 12:11  Masker。  阅读(84)  评论(0编辑  收藏  举报