正則表示式的使用知識
一、元字元
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地址加強版
---------------------
作者:IceDarron
來源:CSDN
原文:https://blog.csdn.net/darron_r/article/details/52718526