天天看點

正規表達式基本正規表達式擴充正規表達式Perl 正規表達式POSIX 字元集

基本正規表達式

正規表達式是一種文本處理方法。基本正規表達式是最早制訂的正則表達規範;

  • 轉義符

    \

    :将特殊字元進行轉義,忽略其特殊意義;
  • 行首定位符

    ^

    :用來比對行首的字元,表示行首字元必須為

    ^

    後面的那個字元;例如:
#! /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次(n是可以為 0 );例如:

    [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:]]