- 反向引用
- 定义:
反向引用的作用通常是用来查找或限定重复、查找或限定指定标识配对出现,反向引用需要使用到分组,分组就是使用()括起来的部分为一个整体,在进行分组匹配时的原则是:由外向内,由左向右
\1:表示的是引用第一次匹配到的()括起来的部分
\2:表示的是引用第二次匹配到的()括起来的部分
- 例子:下面两个单词,要报这两个单词匹配当成一个结果输出
taobao taobao
- 匹配单个单词,这里只能匹配到一个taobao后加一个空格
- 由于重复,可以使用反向引用,而反向引用一定要跟分组一起使用,我们可以把一个单词里面的字母作为一个可重复单元。匹配出来结果一样
- 使用反向引用,这里的1,是表示左边第一个匹配到的组的数据
注:一些表达式可能有多个组,匹配顺序是由外向内,由左向右。1就是表示第一个匹配出来的组,
上面第一个匹配出来的组的数据是taobao即w+ 表示的数据
亦可多次引用:\b(\w+)\b\s(\1)\s\1
(\1)是对的引用(\w+)
\1最后的是对这个的引用(\1)
- 零宽断言
- 定义:
用来预测判断要匹配字符串的前面或后面的格式,一般要跟分组搭配使用,即写在括号内
- 零宽断言正预测先行断言,格式:?=exp
- 简单例子:匹配以ing结束的单词,但是结果中不能有ing即需要匹配除(sing、danc、read)
I'm singing while you're dancing,I reading a book
正则表达式:\w+(?=ing)
\w+:数字、字母、下划线
(?=ing):用来限定\w+后面带有ing,但是结果中是不带ing的
注:假如用\b来限定单词的话,\b的位置是要放在组内的=后
- 零宽正回顾后发断言:?<=exp
- 简单例子:匹配以re开始的单词,但是结果中不能有re即需要匹配除(ading)
正则表达式: (?<=re)\w+
(?<=re)用来限定\w+前面是re开头,但是结果中不包含re
\w+:数字、字母、下划线
注:假如用\b来限定单词的话,\b的位置是要放在组内的=后
- 负向零宽断言
- 零宽断言是用来判断限行正则表达式前面或后面格式(判断存在)
负向零宽断言是用来判断限行正则表达式前面或后面格式(判断不存在)
- 后断言格式:?!exp
例1:匹配单词,单词有个q但是q后面不能是字母u
正则表达式:\b\w*q(?!u)\w*\b
注:以下仍然未明白,想匹配不是以ing结尾的单词,但是全部都匹配出来了。
- 例子2:匹配前面是三位数字,第四位不能是数字
正则表达式:\d{3}(?!\d)
发现最后的891也匹配上了,由于891后面没有数字,所以也匹配上了。假如想剔除这个,可以往下看
- 前断言格式:?<!exp
- 例子:匹配前面不能有数字的
(?<!\d)\d{3}(?!\d)
三位数字,前后都能是数字
- 使用断言匹配出单个数字的结果
5 5 6 776655 6 5 58 8 2 1
- 先匹配除一个数字,且前面至少有一个空格且后面也至少有个空格
(?<=\s+)\d(?=\s+)
- 发现第一个5和最后一个1没有匹配上
- 先用分支条件匹配5,,5所在位置的特点是前面没有空格后面有空格
(?<!\d+)\d(?=\s)
- 再用分支条件匹配最后一个1,最后一个1的特点是前面至少带一个空格,后面不带数字
(?<=\s+)\d(?!\d+)