正则表达式(四)—分组、后向引用与转义

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 正则表达式(四)—分组、后向引用与转义

**正则表达式 **

分组、后向引用与转义

本文继续总结正则表达式的其它内容,主要是分组、后向引用以及转义符。

文章还是会以实例的模式和大家一起学习,下面是用来实验所用的文件。

正则表达式(四)---分组、后向引用与转义

在讲分组之前,还是先一起回顾下匹配指定次数的正则,如”{2} “表示匹配到其前面的字符连续出现2次的行,比如说,我们可以用”qin{2}”将regular_3.txt文件的第4行qinn li匹配到。

但是,如果我们想要匹配连续出现2次qin的行了?单纯的使用”{2} “ 就无能为力了,这时候就需要用到分组了,在正则表达式中,( )表示分组,所谓的分组就是把( ) 中出现的内容当做一个整体。

好了,现在可以找出regular_3.txt 文件连续出现2次qin的行了 ,没错,(qin)**{**2}就是将qin当做一个整体,再和后面的{2} 结合起来表示匹配qin两次,就是这么简单。

正则表达式(四)---分组、后向引用与转义

分组还可以嵌套,这又是什么意思了。看下面的例子。这个表达式看起来很复杂,我们拆开分析相对来说会容易理解些:黄色部分的两侧是( ),因此需要将其作为一个整体和后面的{2} 结合起来就是黄色部分出现2次的行被匹配。

好了,那么黄色部分是又是什么了,可以看出,黄色部分内部的正则为ab(ef){2},这个正则应该不难看出它表示的是abefef吧。

因此,可以分析出整个表达式(ab(ef){2}){2**}**就是匹配abefef 出现2次的行。

正则表达式(四)---分组、后向引用与转义

我们现在可以介绍后向引用了,后向引用是建立在分组的前提上的,这也是为什么我们先讲分组的原因。

在一个含有分组的正则表达式中,默认情况下,每个分组会自动拥有一个组号(从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推)后向引用用于重复搜索前面某个分组匹配的文本。例如,1 代表此处需要再次匹配分组1 的内容。

现在有个小任务,是需要将原始文件的第1行和第6行匹配出。也就说匹配出li前后单词相同的两行。

正则表达式(四)---分组、后向引用与转义

不少人会写出下面的式子,但是从输出看来,结果并不符合要求,因为第二行li 的前后单词不一样,但是也匹配上了。

正则表达式(四)---分组、后向引用与转义

这时候,后向引用就能派上用途了。看到没,表达式(…) li 1含有一个分组(…),这个分组表示匹配任意3个字符,那么表达式后面的1就表示(…) 匹配到什么,这里需要再匹配一次。

因此,如果通过(…) 匹配上了qin,那么在li后面也需要再匹配到qin才能匹配上该行,因此第2行不会匹配上,第1行能匹配上;如果通过(…) 匹配上了qzz,那么在li后面也需要再匹配到qzz才能匹配上 该行,因此第6行能匹配上 。

正则表达式(四)---分组、后向引用与转义

在正则表达式中表示转义,还记得我们前面介绍过的**字符 .吗,在正则表达式中,这些字符有特殊含义,比如说 . 表示匹配任意字符。那如果想要正则表达式就匹配文件中的.**本身了,这时候就需要转义字符了。如下所示,注意正则表达式中有无转义字符所匹配结果的区别。

正则表达式(四)---分组、后向引用与转义正则表达式(四)---分组、后向引用与转义

再举个例子,如果要匹配regular_4.txt 文件中含有的行,应该怎么办了,很简单,只要在前面再加一个就好了,如下。

正则表达式(四)---分组、后向引用与转义

本文是正则表达式系列的第四篇文章,主要总结了正则表达式中分组、后向引用以及转义符的用法,后面将会继续总结正则表达式其它的规则,希望对大家有所帮助,文章中如有遗漏或错误之处,还望大家指出!

推荐阅读:

         

专注服务器后台技术栈知识总结分享

欢迎关注交流共同进步

正则表达式(四)---分组、后向引用与转义
本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 正则表达式(四)—分组、后向引用与转义


 上一篇
正则表达式(三)—常用符号 正则表达式(三)—常用符号
**正则表达式 ** 常用符号 前面两篇关于正则表达式的文章让我们知道了如何利用正则表达式去“匹配位置“以及如何”匹配指定字符的次数“,这篇文章继续总结正则中一些其它的常见符号。 文章还是会以实例的模式和大家一起学习,下面是用来实验用的文件
2021-04-05
下一篇 
正则表达式(五)—扩展正则表达式 正则表达式(五)—扩展正则表达式
**正则表达式 ** 扩展正则表达式 一位看了前面几篇文章朋友向我反馈,说前面匹配次数相关的正则中,前后两个没必要加,意思是”qin{2}” 写成”qin”{2}” 就可以了。确实没错,不过不能直接改成”qin”{2}” ,因为这属于扩展正
2021-04-05