正则表达式之零宽断言

最近在工作中经常需要运用正则表达式,比如匹配以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}匹配前面不是小写字母的七位数字。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值