5、正则表达式高阶功能

  • 反向引用
  1. 定义:

反向引用的作用通常是用来查找或限定重复、查找或限定指定标识配对出现,反向引用需要使用到分组,分组就是使用()括起来的部分为一个整体,在进行分组匹配时的原则是:由外向内,由左向右

\1:表示的是引用第一次匹配到的()括起来的部分
      \2:表示的是引用第二次匹配到的()括起来的部分

  1. 例子:下面两个单词,要报这两个单词匹配当成一个结果输出

taobao taobao

  1. 匹配单个单词,这里只能匹配到一个taobao后加一个空格

  1. 由于重复,可以使用反向引用,而反向引用一定要跟分组一起使用,我们可以把一个单词里面的字母作为一个可重复单元。匹配出来结果一样

  1. 使用反向引用,这里的1,是表示左边第一个匹配到的组的数据

注:一些表达式可能有多个组,匹配顺序是由外向内,由左向右。1就是表示第一个匹配出来的组,

上面第一个匹配出来的组的数据是taobao即w+ 表示的数据

亦可多次引用:\b(\w+)\b\s(\1)\s\1

(\1)是对的引用(\w+)

\1最后的是对这个的引用(\1)

  • 零宽断言
  1. 定义:

用来预测判断要匹配字符串的前面或后面的格式,一般要跟分组搭配使用,即写在括号内

  1. 零宽断言正预测先行断言,格式:?=exp
  2. 简单例子:匹配以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的位置是要放在组内的=后

  1. 零宽正回顾后发断言:?<=exp
  2. 简单例子:匹配以re开始的单词,但是结果中不能有re即需要匹配除(ading)

正则表达式: (?<=re)\w+

(?<=re)用来限定\w+前面是re开头,但是结果中不包含re

\w+:数字、字母、下划线

注:假如用\b来限定单词的话,\b的位置是要放在组内的=后

  • 负向零宽断言
  1. 零宽断言是用来判断限行正则表达式前面或后面格式(判断存在)

负向零宽断言是用来判断限行正则表达式前面或后面格式(判断不存在)

  1. 后断言格式:?!exp

例1:匹配单词,单词有个q但是q后面不能是字母u

正则表达式:\b\w*q(?!u)\w*\b

       注:以下仍然未明白,想匹配不是以ing结尾的单词,但是全部都匹配出来了。

  1. 例子2:匹配前面是三位数字,第四位不能是数字

正则表达式:\d{3}(?!\d)

发现最后的891也匹配上了,由于891后面没有数字,所以也匹配上了。假如想剔除这个,可以往下看

  1. 前断言格式:?<!exp
  2. 例子:匹配前面不能有数字的

(?<!\d)\d{3}(?!\d)

三位数字,前后都能是数字

  • 使用断言匹配出单个数字的结果

5 5  6 776655 6 5 58 8 2 1

  1. 先匹配除一个数字,且前面至少有一个空格且后面也至少有个空格

(?<=\s+)\d(?=\s+)

  1. 发现第一个5和最后一个1没有匹配上
  2. 先用分支条件匹配5,,5所在位置的特点是前面没有空格后面有空格

(?<!\d+)\d(?=\s)

  1. 再用分支条件匹配最后一个1,最后一个1的特点是前面至少带一个空格,后面不带数字

(?<=\s+)\d(?!\d+)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值