\{n\} :表示前面的字符连续出现n次,将会被匹配到。不过需要注意,如果字符连续出现的次数大于指定的次数,也是可以被匹配到的
示例如下:
[[email protected] data]# cat reget.txt
a a
aa
a aa
bb
bbb
c cc ccc
dddd d dd ddd
ab abc abcc
ef eef eeef
[[email protected] data]# grep "a\{2\}" reget.txt
aa
a aa
[[email protected] data]# grep "b\{2\}" reget.txt
bb
bbb
如果你不想出现上述情况,只是想要精准的匹配连续出现2次且只出现了2次的字母b,应该怎么办呢?就是结合单词定界符,锚定词首与锚定词尾
示例如下
[[email protected] data]# grep "\bb\{2\}\b" reget.txt
bb
延申一下
\{x,y\} :表示之前的字符至少连续出现x次,最多连续出现y次,都能被匹配到,换句话说,只要之前的字符连续出现的次数在x与y之间,即可被匹配到
示例如下
[[email protected] data]# grep "d\{2,4\}" reget.txt
dddd d dd ddd
\{x,\} :表示之前的字符至少连续出现x次,或者连续出现次数大于x次,即可被匹配到,上不封顶。
\{,y\} :表示之前的字符至多连续出现y次,或者连续出现次数小于y次,即可被匹配到,最小次数为0次,换句话说,之前的字符连续出现0次到y次,都会被匹配到。
* :在通配符中,*表示匹配任意长度的任意字符。但是,在正则表达式中,*代表另一个意思,在正则表达式中,*表示之前的字符连续出现任意次数(包括0次),不要与通配符中的*搞混淆了。
示例如下
[[email protected] data]# grep "e*f" reget.txt
ef eef eeef
. :”.”表示匹配任意单个字符
示例如下
[[email protected] data]# grep "a." reget.txt
a a
aa
a aa
ab abc abcc
[[email protected] data]# grep "b.." reget.txt
bbb
ab abc abcc
.* :”.*”可以理解为”.”与”*”的结合,”.*”在正则中表示”连续出现任意次的任意单个字符”,换句话说就是,任意长度的任意字符,正则表达式中的”.*”与通配符中的”*”所表达的意思一样。
\? :表示匹配其前面的字符0或1次,换句话说,就是前面的字符要么没有,要么有一个。
\+ :表示匹配其前面的字符至少1次,换句话说,就是前面的字符必须有至少一个。