基本正規表達式
正規表達式是一種文本處理方法。基本正規表達式是最早制訂的正則表達規範;
- 轉義符
:将特殊字元進行轉義,忽略其特殊意義;\
- 行首定位符
:用來比對行首的字元,表示行首字元必須為^
後面的那個字元;例如:^
#! /bin/bash
#表示通過ls 指令列出 /etc 目錄中的檔案,然後将執行結果傳遞給 grep 指令,
#通過 grep 指令篩選出以字元 po 開頭的檔案;
str=`ls /etc | grep "^po"`
echo "$str"
- 行尾定位符
:用來比對行尾字元;例如:$
#! /bin/bash
#列出 /etc 目錄中以 conf 結尾的檔案名
str=`ls /etc | grep "conf$"`
echo "$str"
- 單字元比對
:用來比對任一單個字元(包括空格,但不包括換行符.
);例如:\n
#! /bin/bash
#列出包含字元串 test 以及另外一個字元的檔案名
str=`ls /etc | grep "test."`
echo "$str"
- 限定符
:用來指定前面的一個字元必須重複出現任意次(包括 0 次);例如:*
#! /bin/bash
#篩選以字元 L 開頭,緊跟着 1 個字元 i,任意個字元 n 的檔案名
str=`ls /etc | grep "^Lin*"`
echo "$str"
- 字元集比對
:用來指定一個字元集;例如:[]
#! /bin/bash
#篩選出以字元 L 開頭,緊跟着 1 個字元 i,接着 1 個字元為小寫字母的文本行
str=`ls /etc | grep "^Li[a-z]"`
echo "$str"
- 字元集比對
:表示不比對其中列出來的任意字元;例如:[^]
#! /bin/bash
#篩選出以字元 L 開頭,緊跟着 1 個字元 i,接着 1 個字元為不小寫字母的文本行
str=`ls /etc | grep "^Li[^a-z]"`
echo "$str"
擴充正規表達式
擴充正規表達式支援基本正規表達式的元字元,但是在它的基礎上進行擴充,即除了支援基本正規表達式的元字元外,還會支援其他元字元;
- 限定符
:限定符+
基本上與+
類似,但是限定符*
限定前面字元必須至少出現一次(即不能為 0);例如:+
#! /bin/bash
#篩選以字元 L 開頭,緊跟着 1 個字元 i,至少出現 1 個字元 n 的檔案名
str=`ls /etc | grep "^Lin+"`
echo "$str"
- 限定符
:用來限定前面字元最多隻出現 1 次(包括 0 次);例如:?
#! /bin/bash
#篩選以字元 L 開頭,緊跟着 1 個字元 i,最多出現 1 個字元 n 的檔案名
str=`ls /etc | grep "^Lin?"`
echo "$str"
- 豎線
與圓括号|
:豎線()
表示正規表達式之間“或”的關系,圓括号|
表示一組可選值的集合;例如:()
#! /bin/bash
#篩選含有字元 Lin、Linux 或 study 的文本行
str=`ls /etc | grep "(Lin|Linux|study)"`
echo "$str"
- 比對字元
:比對前面項n次(n是可以為 0 );例如:{n}
比對任意一個三位數;[0-9]{3}
- 比對字元{n,}:前面項至少需要比對 n 次;例如:
比對任意一個兩位數或更多位數;[0-9]{2,}
- 比對字元
:指定前面的項至少比對 n 次,最多比對 m 次;例如:{n,m}
比對從兩位數到五位數之間的任意一個數字;[0-9]{2,5}
Perl 正規表達式
- 數字比對
:比對\d
之間的任意一個數字字元,等價于0~9
;[0-9]
- 非數字比對
:等價于\D
;[^0-9]
- 空白字元比對
:比對任何空白字元,包括空格、制表符以及換頁符,等價于\s
;[\f\n\r\t\v]
- 非空白字元比對
:等價于\S
;[^\f\n\r\t\v]
POSIX 字元集
POSIX字元集是一個形如[:…:]的特殊元序列,他可以用于比對特定的字元範圍;
正規表達式 | 描述 | 示例 |
---|---|---|
[:alnum:] | 比對任意一個字母或數字字元 | [[:alnum:]]+ |
[:alpha:] | 比對任意一個字母字元(包括大小寫字母) | [[:alpha:]]{4} |
[:blank:] | 空格與制表符(橫向和縱向) | [[:blank:]]* |
[:digit:] | 比對任意一個數字字元 | [[:digit:]]? |
[:lower:] | 比對小寫字母 | [[:lower:]]{5,} |
[:upper:] | 比對大寫字母 | ([[:upper:]]+)? |
[:punct:] | 比對标點符号 | [[:punct:]] |
[:space:] | 比對一個包括換行符、回車等在内的所有空白符 | [[:space:]]+ |
[:graph:] | 比對任何一個可以看得見的且可以列印的字元 | [[:graph:]] |
[:xdigit:] | 任何一個十六進制數(即:0-9,a-f,A-F) | [[:xdigit:]]+ |
[:cntrl:] | 任何一個控制字元(ASCII字元集中的前32個字元) | [[:cntrl:]] |
[:print:] | 任何一個可以列印的字元 | [[:print:]] |