java正则出现次数_正则表达式(二)—匹配次数的正则

正则表达式

匹配次数的正则

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

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

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

68bfdf3476ef0c6acd06a67b23f67ce1.gif

1

{m}

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

68bfdf3476ef0c6acd06a67b23f67ce1.gif

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

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

cat  regular_1.txt  | grep "a{100}"

2

{m,}

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

68bfdf3476ef0c6acd06a67b23f67ce1.gif

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

3

{m,n}

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

68bfdf3476ef0c6acd06a67b23f67ce1.gif

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

4

*

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

68bfdf3476ef0c6acd06a67b23f67ce1.gif

68bfdf3476ef0c6acd06a67b23f67ce1.gif

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

5

?

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

68bfdf3476ef0c6acd06a67b23f67ce1.gif

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

6

+

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

68bfdf3476ef0c6acd06a67b23f67ce1.gif

总结

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

推荐阅读:

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

欢迎关注交流共同进步

68bfdf3476ef0c6acd06a67b23f67ce1.gif

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值