加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 01:53:39 所属栏目:百科 来源:网络整理
导读:一、反向引用 刚看到这个词语我迷糊了半天,使用小括号指定一个子表达式, 匹配这个子表达式的文本可以表达式或者其他文本中进一步处理。看到上面这句话是不是晕了。如果晕了就对了,下面我就用自己的话说一下。 就是前面出现的语句后面也可以出现,并且后面

一、反向引用

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

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

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

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

举个例子:如下


表达式的意思是:

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

二、断言

(1)零宽断言

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

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

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



(二) 负向零宽断言

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

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

三、贪婪和懒惰

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

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


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


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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读