什么是正則表達式?
正則表達式(Regular Expression)是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為”元字符”)。正則表達式使用單個字符串來描述、匹配一系列匹配某個句法規則的字符串,許多程序設計語言都支持利用正則表達式進行字符串操作。正則表達式是煩瑣的,但它是強大的,學會之后的應用會讓你除了提高效率外,會給你帶來絕對的成就感。正則表達式默認工作在貪婪模式即盡可能長的匹配。
REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能
程序支持:grep,sed,awk,vim, less,nginx,varnish等
正則表達式按照模式的不同分兩類:基本正則表達式:BRE、擴展正則表達式:ERE
元字符分類:字符匹配、匹配次數、位置錨定、分組
也可以 man 7 regex查看正則表達式的幫助文檔
基本正則表達式
字符匹配
元字符 | 含義 |
---|---|
. | 匹配任意單個字符 |
[] | 匹配指定范圍內的任意單個字符([abcd]匹配abcd其中的任任意一個字符) |
[ ^ ] | 匹配指定范圍外的任意單個字符符([^abcd]:abcd以外的任意字符) |
[:upper:] | 表示任意的大寫字母 |
[:alnum:] | 表示任意字母和數字符 |
[:alpha:] | 代表任何英文大小寫字符A-Z, a-z |
[:lower:] | 表示小寫字母 |
[:blank:] | 空白字符(空格和制表符) |
[:space:] | 水平和垂直的空白字符(比[:blank:]包含的范圍廣) |
[:cntrl:] | 不可打印的控制字符(退格、刪除、警鈴…) ) |
[:digit:] | 十進制數字符 |
[:xdigit:] | 十六進制數字符 |
[:graph:] | 可打印的非空白字符 |
[:print:] | 可打印字符 |
[:punct:] | 標點符號 |
匹配次數
用在要指定次數的字符后面,用于指定前面的字符要出現的次數
元字符 | 含義 |
---|---|
. | 匹配任意單個字符 |
* | 匹配 前面的字符任意次,包括0次 |
.* | 任意 長度的任意字符 |
\? | 匹配 其前面的字符0 或1次 |
\+ | 匹配 其前面的字符至少1次 |
\{n\} | 匹配 前面的字符n次 |
\{m,n\} | 匹配 前面的字符至少m 次,至多n次 |
\{,n\} | 匹配 前面的字符至多n次 |
\{n,\} | 匹配 前面的字符至少n次 |
位置錨定
元字符 | 含義 |
---|---|
^ | 行尾錨定,用于模式的最左側 |
$ | 行尾錨定,用于模式的最右側 |
^PATTERN$ | 用于模式匹配整行 |
^$ | 空行 |
^[[:space:]]*$ | 空白行 |
\>或\b | 詞首錨定,用于單詞模式的左側 |
\<或\b | 詞尾錨定;用于單詞模式的右側 |
\<PATTERN\> | 匹配整個單詞 |
分組
\(\)將一個或多個字符捆綁在一起,當作一個整體進行處理
(root)+分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3等
例如: (string1+(string2)*\)
\1 :string1+(string2\)*
\2 :string2
后向引用是引用前面的分組括號中的模式所匹配字符 , 而非模式本身
或者:\|
示例:a\|b: a 或b 、C\|cat: C 或cat、 \(C\|c\ )at:Cat 或cat
擴展正則表達式
擴展正則表達式 ERE Extended Regular Expressions 比基本正則表達式BRE 擁有更強大的功能,語法看起來更加簡潔。
擴展正則的字符匹配
元字符 | 含義 |
---|---|
. | 匹配任意單個字符 |
[] | 匹配[]指定范圍內的任意單個字符 |
[ ^] | 匹配[]指定范圍外的任意單個字符符 |
[:upper:] | 任意的大寫字母 |
[:alnum:] | 字母和數字符 |
[:alpha:] | 代表任何英文大小寫字符 A-Z, a-z |
[:lower:] | 任意的小寫字母 |
[:blank:] | 空白字符(空格和制表符) |
[:space:] | 水平和垂直的空白字符(比[:blank:]包含的范圍廣) |
[:cntrl:] | 不可打印的控制字符(退格、刪除、警鈴…) ) |
[:digit:] | 十進制數字符 |
[:xdigit:] | 十六進制數字符 |
[:graph:] | 可打印的非空白字符 |
[:print:] | 可打印字符 |
[:punct:] | 標點符號 |
擴展正則的匹配次數
用在要指定次數的字符后面,用于指定前面的字符要出現的次數
元字符 | 含義 |
---|---|
. | 匹配任意單個字符 |
* | 匹配 前面的字符任意次,包括0次 |
.* | 任意 長度的任意字符 |
? | 匹配 其前面的字符0 或1次 |
+ | 匹配 其前面的字符至少1次 |
{n} | 匹配 前面的字符n次 |
{m,n} | 匹配 前面的字符至少m 次,至多n次 |
{,n} | 匹配 前面的字符至多n次 |
{n,} | 匹配 前面的字符至少n次 |
擴展正則的位置錨定
元字符 | 含義 |
---|---|
^ | 行尾錨定,用于模式的最左側 |
$ | 行尾錨定,用于模式的最右側 |
^PATTERN$ | 用于模式匹配整行 |
^$ | 空行 |
^[[:space:]]*$ | 空白行 |
\>或\b | 詞首錨定,用于單詞模式的左側 |
\<或\b | 詞尾錨定;用于單詞模式的右側 |
<string> | 匹配整個單詞 |
原創文章,作者:geekdeedy,如若轉載,請注明出處:http://www.www58058.com/77348