正則表達式必知必會-學習筆記
1.元字符'.'用來匹配一個任意字符
2.元字符'\'用來轉義字符,與其他元字符在一起時,匹配元字符本身
3.元字符'[]'用來匹配一組字符中的任意一個,如'[abcd]',可以用元字符'-'來表示一個區間,例如'[A-Z]',在字符集合意外的地方,'-'字符表示一個普通的字符,不需要轉義,在字符集合裏麵使用'^'表示取非,例如'[^0-9]',表示除數字之外的任意一個字符
4.匹配空白字符。Windows係統中'\r\n\r\n'匹配空白行,Linux係統中'\n\n'匹配空白行
5.匹配特定字符類別。'\d'表示任意一個數字字符,'\D'表示任意一個非數字字符,'\w'任意一個數字、字母、下劃線字符,'\W'則相反,'\s'匹配任意一個空白字符,'\S'則相反。例如:
zhang@DESKTOP-CO960ET ~
$ echo "hello" | grep -P '\w'
hello
zhang@DESKTOP-CO960ET ~
$ echo "hello" | grep -P '\D'
hello
6.使用POSIX字符類。[:alnum:]匹配任意一個字母或數字;[:alpha:]匹配任意一個字母;[:blank:]匹配空格或製表符;[:cntrl:]匹配控製字符;[:digit:]匹配任意一個數字;[:lower:]匹配任意一個小寫字母;[:space:]匹配任意一個空白字符;[:upper:]匹配任意一個大寫字母;[:xdigit:]匹配任意一個十六進製數字,等價於[a-fA-F0-9]。例如:
zhang@DESKTOP-CO960ET ~
$ echo "sss" | grep -P '[[:xdigit:]]'
zhang@DESKTOP-CO960ET ~
$ echo "sssA" | grep -P '[[:xdigit:]]'
sssA
zhang@DESKTOP-CO960ET ~
$ echo "12_A" | grep -P '[[:lower:]]'
zhang@DESKTOP-CO960ET ~
$ echo "12_A" | grep -P '[[:upper:]]'
12_A
zhang@DESKTOP-CO960ET ~
$ echo "12_A" | grep -P '[[:digit:]]'
12_A
7.元字符'+'放在字符或字符集合後麵用來匹配一個或多個字符,與'\'在一起時,用來匹配'+'本身。例如:
zhang@DESKTOP-CO960ET ~
$ echo "a2" | grep -P -o '\d+'
2
zhang@DESKTOP-CO960ET ~
$ echo "a" | grep -P -o '\d+'
zhang@DESKTOP-CO960ET ~
$ echo "a" | grep -P -o '[[:digit:]]+'
zhang@DESKTOP-CO960ET ~
$ echo "a2" | grep -P -o '[[:digit:]]+'
2
zhang@DESKTOP-CO960ET ~
$ echo "a2" | grep -P -o '[a2]+'
a2
zhang@DESKTOP-CO960ET ~
$ echo "a22" | grep -P -o '[a2]+'
a22
8.元字符'*'放在一個字符或字符集後麵,就可以匹配該字符或字符集合連續出現零次或多次的情況,與'\'一起使用時,匹配自身;元字符'?'放在字符或字符集合後麵時,在匹配一個字符的零次或1次出現,與'\'一起使用時,用來匹配自身。例如:
zhang@DESKTOP-CO960ET ~
$ echo "a" | grep -P '2*'
a
zhang@DESKTOP-CO960ET ~
$ echo "a" | grep -P '2?'
a
zhang@DESKTOP-CO960ET ~
$ echo "a" | grep -P '2+'
9.匹配的重複次數。元字符'{}'放在字符或字符集合後麵,表示匹配的次數。具體:'{n}',表示匹配n次;'{n,m}'表示匹配次數為閉區間[n,m];'{n,}'表示匹配至少n次。與'\'一起使用時,表示'{'、'}'字符自身
10.防止過度匹配。貪婪型元字符'*'對應的懶惰型為'*?','+'對應的為'+?','{n,}'對應的為'{n,}?'。區別見例子:
zhang@DESKTOP-CO960ET ~
$ echo "AAhelloAA and AAworldAA" | grep -P -o 'AA.*?AA'
AAhelloAA
AAworldAA
zhang@DESKTOP-CO960ET ~
$ echo "AAhelloAA and AAworldAA" | grep -P -o 'AA.*AA'
AAhelloAA and AAworldAA
最後更新:2017-04-28 00:00:41