正则表达式之零宽断言
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}匹配前面不是小写字母的七位数字。
概念:
零宽断言是正则表达式的一种方法,用于查找在某些内容(但并不包括这些内容)之前或者之后的东西,也就是说他们像\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}匹配前面不是小写字母的七位数字。
相关文章推荐
- 《叩响C#之门》正则表达式(六) 预查(零宽断言)
- 正则表达式零宽断言详解(?=,?<=,?!,?<!)
- 正则表达式–零宽断言详解
- python正则表达式系列(5)——零宽断言
- 正则表达式-零宽断言实践
- 正则表达式零宽断言
- 正则表达式中零宽断言(正则环视) grep -oP参数
- 正则表达式零宽断言
- 正则表达式零宽断言详解
- 正则表达式(二) - 零宽断言与懒惰匹配以及平衡组
- 正则表达式(二) - 零宽断言与懒惰匹配以及平衡组
- $python正则表达式系列(5)——零宽断言
- 正则表达式之零宽断言实例详解【基于PHP】
- 正则表达式之零宽断言详解
- 正则表达式中的零宽断言
- 正则表达式(后向引用和断言)
- 正则表达式–零宽断言详解
- [正则] 零宽断言的练手
- 正则表达式中的零宽断言
- 正则表达式零宽断言详解