1. 程式人生 > >RE正則表示式總結(一)

RE正則表示式總結(一)

一、概念

        正則表示式,又稱規則表示式(英語:Regular Expression,在程式碼中常簡寫為regex、regexp或RE),電腦科學的一個概念。正則表示式是對字元(包括普通字元(例如,a 到 z 之間的字母)和特殊字元(稱為“元字元”))操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字串”,用來檢索、替換那些符合規則的文字,這個“規則字串”用來表達對字串的一種過濾邏輯。

二、匹配規則

1、匹配字元

可列印字元:

 \d : 匹配一個數字,等價於[0-9] ;  

\D : 匹配非數字,等價於[^0-9]

\w : 匹配一個數字、字母或下劃線,等價於[A-Za-z_0-9] ;    

\W : 匹配非數字、字母或下劃線,等價於[^A-Za-z_0-9]

\s: 匹配空格字元,等價於 [ \f\n\r\t\v];

\S : 匹配非空格,等價於 [^ \f\n\r\t\v];

非列印字元:

\cx : 匹配由x指明的控制字元。例如, \cM 匹配一個 Control-M 或回車符。x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一個原義的 'c' 字元;

\f  :匹配一個換頁符。等價於 \x0c 和 \cL;

\n:匹配一個換行符。等價於 \x0a 和 \cJ;

\r :匹配一個回車符。等價於 \x0d 和 \cM;

\t  :匹配一個製表符。等價於 \x09 和 \cI;

\v:匹配一個垂直製表符。等價於 \x0b 和 \cK;

\s : 匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。注意 Unicode 正則表示式會匹配全形空格符

 

2、匹配元字元(特殊字元)

特殊字元在正則中代表了特殊的含義,要匹配字元本身,需在字元前使用“\”進行轉義。

^ :限定輸入字串的開始位置(如在方括號表示式中使用,表示不接受該字元集合),要匹配 ^ 字元本身,使用 \^;

$ :限定輸入字串的結尾位置,要匹配 $ 字元本身,使用 \$;

( ):標記一個子表示式的開始和結束位置,子表示式可以獲取供以後使用。要匹配(),使用 \( 和 \);

* :匹配前面的子表示式零次或多次,要匹配 * 字元,使用 \*;

+ :匹配前面的子表示式一次或多次,要匹配 + 字元,使用 \+;

. :匹配除換行符 \n 之外的任何單字元,要匹配 . ,使用 \.,若需匹配換行符,新增引數re.S  ;

[ :標記一箇中括號表示式的開始,要匹配 [,使用 \[;

? :匹配前面的子表示式零次或一次,或指明一個非貪婪限定符,要匹配 ? 字元,使用 \?;

\ : 將下一個字元標記為 或特殊字元、或原義字元、或向後引用、或八進位制轉義符,匹配\,使用\\;

{ :標記限定符表示式的開始,要匹配 {,使用 \{。

| :指明兩項之間的一個選擇(邏輯“或”運算),要匹配 |,使用 \|。

限定符:

*  :匹配前面的子表示式零次或多次,* 等價於{0,},貪婪模式(最大匹配);

+ :匹配前面的子表示式一次或多次,+ 等價於 {1,},貪婪模式;

? :匹配前面的子表示式零次或一次,? 等價於 {0,1},放在“*”或者“+”後面,表示非貪婪模式(最小匹配);

{n}:n 是一個非負整數。匹配確定的 n 次;

{n,} :n 是一個非負整數。至少匹配n 次,'o{1,}' 等價於 'o+','o{0,}' 則等價於 'o*';

{n,m} :m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次,注意在逗號和兩個數之間不能有空格;

 

 定位符:

^:匹配輸入字串開始的位置,如果設定了 RegExp 物件的 Multiline 屬性,^ 還會與 \n 或 \r 之後的位置匹配;

$ :匹配輸入字串結尾的位置,如果設定了 RegExp 物件的 Multiline 屬性,$ 還會與 \n 或 \r 之前的位置匹配;

\b:匹配一個字邊界,即字與空格間的位置,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”\b 字元的位置是非常重要的,如果它位於要匹配的字串的開始,它在單詞的開始處查詢匹配項,如果它位於字串的結尾,它在單詞的結尾處查詢匹配項;

\B:非字邊界匹配,“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”

 

[] : 所有字元都是原字元(無特殊含義)字符集

 [^] : 非 [] , 取反,匹配所有不不包含在中括號中的字元,^需要放在[]中首位
 () : 分組,
將“(  )” 之間的表示式定義為“組”(group),並且將匹配這個表示式的字元儲存到一個臨時區域(一個正則表示式中最多可以儲存9個),它們可以用 \1 到\9 的符號來引用;

優先順序

正則表示式從左到右進行計算,並遵循優先順序順序,這與算術表示式非常類似。

相同優先順序的從左到右進行運算,不同優先順序的運算先高後低。下表從最高到最低說明了各種正則表示式運算子的優先順序順序:

\    

轉義符
(), (?:), (?=), []

圓括號和方括號

*, +, ?, {n}, {n,}, {n,m}

限定符

^, $, \任何元字元、任何字元

定位點和序列(即:位置和順序)

|

替換,"或"操作字元具有高於替換運算子的優先順序