您的位置:首页 > 其它

正则表达式之零宽断言

2017-12-24 14:59 246 查看
最近在工作中经常需要运用正则表达式,比如匹配以XX结尾的字符串,匹配括号内的内容(包括或者不包括括号)等等,自己这方面一直比较薄弱,因此在网上搜索了很多关于正则的内容,找到了一个叫零宽断言的方法。

概念:

零宽断言是正则表达式的一种方法,用于查找在某些内容(但并不包括这些内容)之前或者之后的东西,也就是说他们像\b(匹配一个单词边界,也就是单词和空格间的位置,正则表达式的匹配有两种概念,一种是匹配字符,一种是匹配位置,这里的\b就是匹配位置,例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”),^(匹配输入字行首),$(匹配输入字行尾)那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。断言用来声明一个应该为真的事实,正则表达式中只有当断言为真时才会继续进行匹配。

零宽断言一共分为四种

1.零宽度正预测先行断言 (?=exp)匹配exp前面的位置

例:\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc。

2.零宽度正回顾后发断言 (?<exp)匹配exp后面的位置

例:比如(?<=\bre)\w+\b会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。

3.零宽度负预测先行断言 (?!exp)匹配后面跟的不是exp的位置

例:例如:\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字;\b((?!abc)\w)+\b匹配不包含连续字符串abc的单词。

4.零宽度负回顾后发断言 (?<!exp)匹配前面不是exp的位置

例:(?<![a-z])\d{7}匹配前面不是小写字母的七位数字。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  正则