正则表达式(四)--- 反向引用、断言
一、反向引用 刚看到这个词语我迷糊了半天,使用小括号指定一个子表达式, 匹配这个子表达式的文本可以表达式或者其他文本中进一步处理。看到上面这句话是不是晕了。如果晕了就对了,下面我就用自己的话说一下。 就是前面出现的语句后面也可以出现,并且后面出现能够根据前面出现指定的顺序。 默认情况下,每个分组会自动拥有一个组号,规则是从左向右,以分组的左括号为标志。 你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?<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。。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |