正则表达式(二)—匹配次数的正则

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

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

原文链接:blog.ouyangsihai.cn >> 正则表达式(二)—匹配次数的正则

**正则表达式 **

匹配次数的正则

在前一篇文章中,我们总结了和位置相关的正则,在这篇文章中,我们将继续学习正则表达式其它的内容。

假如现在给你一个regular_1.txt文件,让你找出含有连续2个a的行,应该怎么查找?这还不简单嘛,cat  regular_1.txt  | grep “aa” ;很好,现在换成另一个问题:找出含有连续100个a的行 。难道在命令中连续写上100个a ?显然太累人了。

我们完全可以利用正则解决上面这个问题,这就是这篇文章主要讲述的内容。老规矩,还是先给出测试需要用到原始文件的内容。

正则表达式(二)---匹配次数的正则

{m} 表示匹配前面字符m次,也就是说前面字符出现m次的行会被匹配,好了,实验一把吧,查找regular_1.txt 文件中a连续出现2次的行。

正则表达式(二)---匹配次数的正则

看到没,好家伙,一下输出了这么多行,只要是连续出现了2次a以上的行都会被匹配上,这个世界究竟怎么了?我明明只是想要连续出现两次a的行就可以了,干嘛给我返回这么多。其实很简单。连续3个a就已经包含了连续2个a,肯定能匹配上。再看看第5行,连续4个a包含了2次连续2个a,相当于第5行匹配上了2次。

现在我们可以很轻松的写出下面这样的命令来找出文件中含有连续100个a的行  :

**cat  regular_1.txt  | grep “a{100}”  **

{m,} 至少匹配前面字符m次,好了,** 我们再来查找regular_1.txt 文件中a连续 出现2次以上的行。 **

正则表达式(二)---匹配次数的正则

咋一看,好像和上面的输出结果没什么区别啊,但是仔细看看第4、6行,还是有些许不同的,以第3行为例,{2}形式匹配的时候第3行被匹配上是因为连续包含了2个a被匹配上,因此输出中最后的a没有颜色;而{2,}形式第3行被匹配上是因为连续包含了3个a才被匹配上。果相同但因却不一样。

{m,n} 匹配前面字符 最少m次,最多m次都可以,好了,** 我们再来查找regular_1.txt 文件中a连续 出现2次到3次的行。 ** 

正则表达式(二)---匹配次数的正则

至于第6行含有连续5个a为什么能被匹配上,通过前面的分析我想大家应该知道原因吧。

表示其前面的字符连续出现任意次,这个任意当然包括0次了,也包括多次,好了,现在我们用来匹配测试下。

正则表达式(二)---匹配次数的正则 正则表达式(二)---匹配次数的正则

可以看出,原始文件中无论有多少个a都被匹配出,尽管第1行不含a字符,但还是匹配出来了。

?表示其前面的字符连续出现0次或者1次,下面我们用它来匹配regular_1.txt文件中出现0次或者1次的行。

正则表达式(二)---匹配次数的正则

看到上面的结果吗,竟然和匹配的结果是一样的,尽管结果一样,但是匹配的原理是不同的。以第3行为例,**如果使用匹配,则第3行是以因为其连续含有2个a被匹配上的;而如果是以?匹配,则第3行被匹配上是因为先匹配了上1个a,再匹配上后面的a,相当于匹配上了2次。**所以有时候看事务是不能只看表面的。

+ 表示其前面的字符连续出现1次或者多次,也就是说,+前面的字符至少要连续出现一次才能匹配上。如果我们需要查找文件中出现过a字符的行,我们可以使用下面的命令。

正则表达式(二)---匹配次数的正则

主要总结了正则表达式中关于次数匹配相关的正则,后面还会总结正则表达式其它的规则,希望对大家有所帮助,文章中如有遗漏或错误之处,还望大家指出!

推荐阅读:

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

欢迎关注交流共同进步

正则表达式(二)---匹配次数的正则
本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

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

原文链接:blog.ouyangsihai.cn >> 正则表达式(二)—匹配次数的正则


 上一篇
正则表达式(一)—位置锚定 正则表达式(一)—位置锚定
**正则表达式 ** 位置锚定 其实本来是准备将sed以及awk的用法放在grep后面总结的,但是考虑到如果不先讲正则表达式,sed和awk的很多东西没办法讲,因此决定将正则表达式提前到它们前面讲。 如果你已经掌握了正则表达式的用法,那可以
2021-04-05
下一篇 
正则表达式(三)—常用符号 正则表达式(三)—常用符号
**正则表达式 ** 常用符号 前面两篇关于正则表达式的文章让我们知道了如何利用正则表达式去“匹配位置“以及如何”匹配指定字符的次数“,这篇文章继续总结正则中一些其它的常见符号。 文章还是会以实例的模式和大家一起学习,下面是用来实验用的文件
2021-04-05