天天看點

正規表達式-連續次數比對

\{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次,換句話說,就是前面的字元必須有至少一個。
           

繼續閱讀