什么是正則表達式
正則表達式是一種描述一組字符串的模式,為處理大量文本、字符串而定義的一套規則和方法,以行為單位進行處理。正則表達式分為兩類:基本正則表達式(BRE)和擴展正則表達式(ERE)。在linux中使用正則表達式較多的有三個工具,分別為grep,sed和awk,這三個工具被稱為linux文本處理的三劍客。
基本正則表達式
字符匹配:
.:匹配任意單個字符
[ ]:匹配指定范圍內的任意單個字符
[^]:匹配指定范圍外的任意單個字符
幾種特殊表示:
特殊符號 |
代表意義 |
[:alnum:] |
代表英文大小寫字符及數字,亦即 0-9, A-Z, a-z |
[:alpha:] |
代表任何英文大小寫字符,亦即 A-Z, a-z |
[:blank:] |
代表空白鍵與 [Tab] 按鍵兩者 |
[:cntrl:] |
代表鍵盤上面的控制按鍵,亦即包括 CR, LF, Tab, Del.. 等等 |
[:digit:] |
代表數字而已,亦即 0-9 |
[:graph:] |
除了空白字符 (空白鍵與 [Tab] 按鍵) 外的其他所有按鍵 |
[:lower:] |
代表小寫字符,亦即 a-z |
[:print:] |
代表任何可以被打印出來的字符 |
[:punct:] |
代表標點符號 (punctuation symbol),亦即:" ' ? ! ; : # $... |
[:upper:] |
代表大寫字符,亦即 A-Z |
[:space:] |
任何會產生空白的字符,包括空白鍵, [Tab], CR 等等 |
[:xdigit:] |
代表 16 進位的數字類型,因此包括: 0-9, A-F, a-f 的數字與字符 |
匹配次數:
*:匹配其前面的字符任意次(0次、1次或多次)
.*:匹配任意長度的任意字符
\?:匹配起前面字符0次或1次
\+:匹配其前面字符1次或多次
\{m\}:匹配其前面的字符m次
\{m,n\}:匹配其前面字符最少m次,最多n次
\{m,\}:匹配其前面字符最少m次
\{,n\}:匹配其前面字符最多n次
位置錨定:
^:行首錨定
$:行尾錨定
^$:匹配空白行
\<或\b:詞首錨定
\>或\b:詞尾錨定
\<PATTERN\>:匹配完整的單詞
分組及引用:
\(\):將多個字符捆綁在一起,當做一個整體處理
分組括號匹配到的內容,會被正則表達式引擎自動記錄到內部變量中,變量為
\1:模式從左側起,第一個左括號以及與之匹配的右括號之間的模式所匹配到的字符
\2:模式從左側起,第二個左括號以及與之匹配的右括號之間的模式所匹配到的字符
擴展正則表達式
字符匹配:
.:匹配任意單個字符
[ ]:匹配指定范圍內的任意單個字符
[^]:匹配指定范圍外的任意單個字符
次數匹配:
*:匹配其前面的字符任意次(0次、1次或多次)
?:匹配起前面字符0次或1次
+:匹配其前面字符1次或多次
{m}:匹配其前面的字符m次
{m,n}:匹配其前面字符最少m次,最多n次
{m,}:匹配其前面字符最少m次
{,n}:匹配其前面字符最多n次
位置錨定:
^:行首錨定
$:行尾錨定
\<或\b:詞首錨定
\>或\b:詞尾錨定
分組及引用:
():分組;括號內的模式匹配到的字符會被記錄於正則表達式引擎的內部變量中,變量為\1,\2等
或:
|:a|b表示a或者b
比較基本正則表達式和擴展正則表達式發現,基本正則表達式的很多符號需要轉義“\”,而擴展正則表達式不需要