正則表達式入門-知識字典

正則表達式的一些基本使用總結,可以當一個字典來使用。

一、元字符

1.     \b     元字符    開頭和結尾

2.     .      元字符    匹配除了換行符以外的任意字符

3.     *      元字符    指定*前邊的內容可以連續重複使用任意次以使整個表達式得到匹配(0次或多次)

4.     \d     元字符    匹配一位數字

5.     -                匹配連字符本身

6.     字符串           匹配字符串本身

7.     \d\d\d\d\d\d  等同於  \d{6}

8.     \s     元字符    匹配任意的空白符,包括空格,製表符(Tab),換行符,中文全角空格

9.     \w     元字符    匹配字母或數字或下劃線或漢字

10.    +      元字符    匹配1個或更多(1次或多次)

11.    ^     元字符    匹配字符串的開始

12.    $     元字符    匹配字符串的結束

(^$與\b的區別是:前者,必須這個字符串完全符合^$中間的規則。後者,這個字符串只要有匹配的部分就可以)

13.    ?     元字符    匹配零次或一次(0或1)

14.    {n} {n,} {n,m}   指定重複次數(左閉右閉區間)

15.    []     元字符?

16.    ()   元字符


二、字符轉義

查找元字符本身,需要使用\來解釋元字符,\可以取消元字符的特殊意義


三、字符類

使用[]包含想要匹配的字符串

[0-9]代表\d 

[a-z0-9A-Z_]也完全等同於\w(如果只考慮英文的話)


四、分枝條件(|)

|

使用分枝條件時,要注意各個條件的順序

匹配分枝條件時,將會從左到右地測試每個條件,如果滿足了某個分枝的話,就不會去再管其它的條件了


五、分組

()

(\d{1,3}\.){3}\d{1,3}是一個簡單的IP地址匹配表達式


六、反義

\W         匹配任意不是字母,數字,下劃線,漢字的字符

\S         匹配任意不是空白符的字符

\D         匹配任意非數字的字符

\B         匹配不是單詞開頭或結束的位置

[^x]       匹配除了x以外的任意字符

[^aeiou]   匹配除了aeiou這幾個字母以外的任意字符




七、後向引用

使用小括號指定一個子表達式後,匹配這個子表達式的文本(也就是此分組捕獲的內容)可以在表達式或其它程序中作進一步的處理。默認情況下,每個分組會自動擁有一個組號,規則是:從左向右,以分組的左括號爲標誌,第一個出現的分組的組號爲1,第二個爲2,以此類推。

後向引用用於重複搜索前面某個分組匹配的文本。例如,\1代表分組1匹配的文本



分組0對應整個正則表達式

實際上組號分配過程是要從左向右掃描兩遍的:第一遍只給未命名組分配,第二遍只給命名組分配--因此所有命名組的組號都大於未命名的組號

你可以使用(?:exp)這樣的語法來剝奪一個分組對組號分配的參與權.




八、常用分組語法

分類       代碼/語法        說明

捕獲       (exp)            匹配exp,並捕獲文本到自動命名的組裏

            (?<name>exp)    匹配exp,並捕獲文本到名稱爲name的組裏,也可以寫成(?'name'exp)

            (?:exp)          匹配exp,不捕獲匹配的文本,也不給此分組分配組號

零寬斷言   (?=exp)          匹配exp前面的位置

            (?<=exp)        匹配exp後面的位置

            (?!exp)          匹配後面跟的不是exp的位置

            (?<!exp)        匹配前面不是exp的位置

註釋       (?#comment)      這種類型的分組不對正則表達式的處理產生任何影響,用於提供註釋讓人閱讀



九、零寬斷言

\b\w+(?=ing\b)    匹配以ing結尾的單詞的前面部分(除了ing以外的部分)

(?<=\bre)\w+\b    匹配以re開頭的單詞的後半部分(除了re以外的部分)

負向零寬斷言

(?<=<(\w+)>).*(?=<\/\1>)    匹配不包含屬性的簡單HTML標籤內裏的內容



十、註釋

(?#comment)來包含註釋。例如:2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)。



十一、貪婪與懶惰

貪婪 匹配儘可能多

a.*b

懶惰 匹配儘可能少

a.*?b  即數量符號後面加上?



十二、處理選項

IgnoreCase(忽略大小寫)                 匹配時不區分大小寫。

Multiline(多行模式)                     更改^和$的含義,使它們分別在任意一行的行首和行尾匹配,而不僅僅在整個字符串的開頭和結尾匹配。(在此模式                                        下,$的精確含意是:匹配\n之前的位置以及字符串結束前的位置.)

Singleline(單行模式)                   更改.的含義,使它與每一個字符匹配(包括換行符\n)。

IgnorePatternWhitespace(忽略空白)       忽略表達式中的非轉義空白並啓用由#標記的註釋。

ExplicitCapture(顯式捕獲)               僅捕獲已被顯式命名的組。



十三、平衡組/遞歸匹配

匹配HTML    <div[^>]*>[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>











附錄:常見正則表達式

1、js端

// [^\da-zA-Z0-9\u4e00-\u9fa5_-]表示除了【數字中文字大小寫字母_-】外的任意字符   /g是替換的意思

// 此句完整意思就是 替換value中所有非【數字中文字大小寫字母_-】的字符爲【""】

var temp = value.replace(/[^\da-zA-Z0-9\u4e00-\u9fa5_-]/g, "");   



2、java端

\u00A0和\u3000分別代表着半角和全角空格

(\d{1,3}\.){3}\d{1,3} IP地址

^([^\.]*([a-zA-Z0-9\u4e00-\u9fa5]+\.)*[^\.]*)*$ IP地址加強版






發佈了17 篇原創文章 · 獲贊 5 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章