正則表達式
在Linux當中,我們常常用到文本處理工具實現諸多功能,比如文本過濾工具grep等等,而此時往往需要正則表達式的輔助。
正則表達式:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能。
正則表達式分類:基本正則表達式、擴展正則表達式
元字符分類:字符匹配、匹配次數、位置錨定、分組
正則表達式
1、基本正則表達式元字符
(a)字符匹配
- . 匹配任意單個字符
- [] 匹配指定范圍內的任意單個字符
- [^] 匹配指定范圍外的任意單個字符
- [:alnum:] 字母和數字
- [:alpha:] 代表任何英文大小寫字符,亦即 A-Z, a-z
- [:lower:] 小寫字母 [:upper:] 大寫字母
- [:blank:] 空白字符(空格和制表符)
- [:space:] 水平和垂直的空白字符(比[:blank:]包含的范圍廣)
- [:cntrl:] 不可打印的控制字符(退格、刪除、警鈴…)
- [:digit:] 十進制數字 [:xdigit:]十六進制數字
- [:graph:] 可打印的非空白字符
- [:print:] 可打印字符
- [:punct:] 標點符號
(b)匹配次數
- *匹配前面的字符任意次,包括0次(貪婪模式:盡可能長的匹配)
- .*任意長度的任意字符
- \?匹配其前面的字符0或1次
- \+匹配其前面的字符至少1次
- \{n\} 匹配前面的字符n次
- \{m,n\} 匹配前面的字符至少m次,至多n次
- \{,n\} 匹配前面的字符至多n次
- \{n,\} 匹配前面的字符至少n次
(c)位置錨定
- ^ 行首錨定,用于模式的最左側
- $ 行尾錨定,用于模式的最右
- ^PATTERN$ 用于模式匹配整行
- ^$ 空行
- ^[[:space:]]*$ 空白行
- < 或 \b 詞首錨定,用于單詞模式的左側
- \> 或 \b 詞尾錨定;用于單詞模式的右側
- <PATTERN> 匹配整個單詞
(d)分組
\(\) 將一個或多個字符捆綁在一起,當作一個整體進行處理
如: \(string1\+\(string2\)\),此處括號把string2作為一個分組,string1\+\(string2\)**作為一個大的分組。
分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3, ...
\1 表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符,一次類推
還是上面的例子: \(string1\+\(string2\)\)
\1: string1\+\(string2\)
\2: string2
后向引用:引用前面的分組括號中的模式所匹配字符, 而非
模式本身
或者: |
示例: a|b: a或b C|cat: C或cat (C|c)at:Cat或cat
2、擴展正則表達式
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]
(a)字符匹配
- .任意單個字符
- [] 指定范圍的字符
- [^] 不在指定范圍的字符
(b)匹配次數
- *:匹配前面字符任意次
- ?: 0或1次
- +: 1次或多次
- {m}:匹配m次
- {m,n}:至少m,至多n次
(c)位置錨定
- ^ :行首
- $ :行尾
- \<, \b :語首
- \>, \b :語尾
(d)分組
- ()
后向引用: \1, \2, ... - 或者:
a|b:a或b
C|cat:C或cat
(C|c)at:Cat或cat