正则表达式详解(二、连续次数的匹配)

11 篇文章 0 订阅

为了方便测试正则表达式对连续次数匹配的使用,我们创建测试文件regex.txt,内容如下:

aaa
bbb bb bbbbbb
hello world helloo hello
cccc  cccc cccccccddd
cc dd ccc ccccccrrrr
cc ccc cccc
abc abc abcc abcde
ddd dddddddddd dddd2222

:要匹配到含有cc的行

方法一:grep "cc" regex.txt -n       方法二:grep "c\{2\}" regex.txt -n
显示效果一致

 语法:\{x\}表示之前的字符连续出现x次将会被匹配到
 注意:如果字符连续出现的次数大于指定的次数,也是可以被匹配到的

问题:只想匹配出现2个c的行怎么办?

方法一:grep "\<c\{2\}\>" regex.txt -n   
方法二:grep "\<cc\>" regex.txt -n
方法三:grep "\<c\{2,2\}\>" regex.txt -n
上述方式使用"\<\>"单词定界符,锚定词首与锚定词尾。
语法:“\{x,y\}”表示之前的字符至少连续出现x次,最多连续出现y次,都能被匹配到

 :grep "h*" regex.txt -n

 

如上图所示,”h*”表示h连续出现任意次数,即可被匹配到,所以,第3行高亮显示了。但是其他行为什么也被打印出来了呢?这是因为*表示连续出现任意次数,包括0次。其他行中,根本不包含字母h,换句话说就是,h连续出现了0次,所以其他行也符合条件,最终也被grep输出了

语法:
在通配符中,*表示匹配任意长度的任意字符。
在正则表达式中,*表示之前的字符连续出现任意次数(包括0次),不要与通配符中的*搞混淆了。
正则表达式中,”.”表示匹配任意单个字符,例如:

正则表达式中,使用”.*”表示任意长度的任意字符;例如,

 

 \?
表示匹配其前面的字符0或1次,换句话说,就是前面的字符要么没有,要么有一个。

 其它行匹配出来是因为前面的w可以出现0次。

\+
表示匹配其前面的字符至少1次,换句话说,就是前面的字符必须有至少一个

 总结:

*

表示前面的字符连续出现任意次,包括0次
. 表示任意单个字符。
.* 表示任意长度的任意字符,与通配符中的*的意思相同。
\?

表示匹配其前面的字符0或1

\+表示匹配其前面的字符至少1次,或者连续多次,连续次数上不封顶。
\{n\}

表示前面的字符连续出现n次,将会被匹配到。

\{x,y\}表示之前的字符至少连续出现x次,最多连续出现y次,都能被匹配到,换句话说,只要之前的字符连续出现的次数在x与y之间,即可被匹配到。
\{,n\}

表示之前的字符连续出现至多n次,最少0次,都会陪匹配到。

\{n,\}表示之前的字符连续出现至少n次,才会被匹配到.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值