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} |
限定符 |
^, $, \任何元字元、任何字元 |
定位點和序列(即:位置和順序) |
| |
替換,"或"操作字元具有高於替換運算子的優先順序 |