正则表达式(四)--- 反向引用、断言

一、反向引用

 刚看到这个词语我迷糊了半天,使用小括号指定一个子表达式, 匹配这个子表达式的文本可以表达式或者其他文本中进一步处理。看到上面这句话是不是晕了。如果晕了就对了,下面我就用自己的话说一下。

就是前面出现的语句后面也可以出现,并且后面出现能够根据前面出现指定的顺序。

默认情况下,每个分组会自动拥有一个组号,规则是从左向右,以分组的左括号为标志。

你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?<Word>\w+)(或者把尖括号换成'也行:(?'Word'\w+)),这样就把\w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用\k<Word>

举个例子:如下


表达式的意思是:

首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。

二、断言

(1)零宽断言 

        一句话: 指定满足一定条件的位置

       先行断言:就是断言自身出现位置的后面  (?=exp)

        后发断言: 断言自身出现位置的前面       (? <= exp)

                      



(二) 负向零宽断言

解决问题: 查找这样的单词--它里面出现了字母q,但是q后面跟的不是字母u

\b\w*q[^u]\w*\b匹配包含后面不是字母u的字母q的单词

三、贪婪和懒惰

贪婪匹配 : 当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。

如果用它来搜索aabab的话,它会匹配整个字符串aabab。。


懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。


a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值