正則表達式教程
一、什么是正則表達式?
簡單的說:正則表達式(Regular Expression)是一種處理字符串匹配的語言;
正則表達式描述了一種字符串匹配的模式,可以用來檢查一個字符串是否含有某種子串,對匹配到的子串進行“取出”或“替換”操作。
二、正則表達式的應用
正則表達式在實際的開發過程中非常實用,能夠快速解決一些復雜的字符串處理問題,下面我對正則表達式的應用做一些簡單分類:
第一種:數據驗證
比如,你要驗證一個字符串是否是正確的EMail,Telphone,Ip等等,那么采用正則表達式就好非常方便。
第二種:內容查找
比如,你要抓取一個網頁的圖片,那么你肯定要找到<img>標簽,這時候用正則表達式就可以精準的匹配到。
第三種:內容替換
比如,你要把手機號碼中間四位隱藏掉變成這種模式,123****4567,那么采用正則表達式也會非常方便。
三、正則表達式有哪些內容
下面我將簡單的介紹一下正則表達式:
1、 正則表達式的幾個重要的概念
?子表達式:在正則表達式中,如果使用"()"括起來的內容,稱之為“子表達式”
?捕獲:子表達式匹配到的結果會被系統放在緩沖區中,這個過程,我們稱之為“捕獲”
?反向引用:我們使用"\n",其中n是數字,表示引用之前某個緩沖區之間的內容,我們稱之為“反向引用”
2、數量限定符
?X+ 表示:1或多個
?X* 表示:0或多個
?X? 表示:0或1個
?X{n} 表示: n個
?X{n,} 表示:至少n個
?X{n,m} 表示:n至m個,貪婪原則,會盡可能匹配多個;如果在后面加個?,則為非貪婪原則
注:X表示要查找的字符
3、 字符限定符
?\d 表示:匹配一個數字字符,[0-9]
?\D 表示:匹配一個非數字字符,[^0-9]
?\w 表示:匹配包括下劃線在內的單詞字符,[0-9a-zA-Z_]
?\W 表示:匹配任何非單詞字符,[^0-9a-zA-Z_]
?\s 表示:匹配任何空白字符,空格、回車、制表符
?\S 表示:匹配任何非空白字符
?. 表示:匹配任何單個字符
此外還有以下幾種:
范圍字符:[a-z]、[A-Z]、[0-9]、[0-9a-z]、[0-9a-zA-Z]
任意字符:[abcd]、[1234]
非在內的字符:[^a-z]、[^0-9]、[^abcd]
4、 定位符
?^ 表示:開頭標識
?$ 表示:結尾標識
?\b 表示:單詞邊界
?\B 表示:非單詞邊界
5、轉義符
?\ 用于匹配某些特殊字符
6、選擇匹配符
?| 可以匹配多個規則
7、特殊用法
?(?=) : 正向預查:匹配以指定內容結束的字符串
?(?!) : 負向預查:匹配不是以指定內容結束的字符串
?(?:) : 不把選擇匹配符的內容放到緩沖區
元字符
正則表達式規定的一個特殊代碼(好吧,某些人叫它元字符,metacharacter).
現在你已經知道幾個很有用的元字符了,如\b,.,*,還有\d.正則表達式里還有更多的元字符,比如\s匹配任意的空白符,包括空格,制表符(Tab),換行符,中文全角空格等。\w匹配字母或數字或下劃線或漢字等。
對中文/漢字的特殊處理是由.Net提供的正則表達式引擎支持的,其它環境下的具體情況請查看相關文檔。
下面來看看更多的例子:
\ba\w*\b匹配以字母a開頭的單詞——先是某個單詞開始處(\b),然后是字母a,然后是任意數量的字母或數字(\w*),最后是單詞結束處(\b)。
好吧,現在我們說說正則表達式里的單詞是什么意思吧:就是不少于一個的連續的\w。不錯,這與學習英文時要背的成千上萬個同名的東西的確關系不大 :)
\d+匹配1個或更多連續的數字。這里的+是和*類似的元字符,不同的是*匹配重復任意次(可能是0次),而+則匹配重復1次或更多次。
\b\w{6}\b 匹配剛好6個字符的單詞。
表1.常用的元字符代碼 | 說明 | </tr> </tbody>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
. | 匹配除換行符以外的任意字符 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
\w | 匹配字母或數字或下劃線或漢字 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
\s | 匹配任意的空白符 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
\d | 匹配數字 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
\b | 匹配單詞的開始或結束 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
^ | 匹配字符串的開始 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$ | 匹配字符串的結束 | </tr> </tbody> </table>
代碼/語法 | 說明 | </tr> </tbody>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
* | 重復零次或更多次 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+ | 重復一次或更多次 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
? | 重復零次或一次 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{n} | 重復n次 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{n,} | 重復n次或更多次 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{n,m} | 重復n到m次 | </tr> </tbody> </table>
代碼/語法 | 說明 | </tr> </tbody>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
\W | 匹配任意不是字母,數字,下劃線,漢字的字符 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
\S | 匹配任意不是空白符的字符 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
\D | 匹配任意非數字的字符 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
\B | 匹配不是單詞開頭或結束的位置 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[^x] | 匹配除了x以外的任意字符 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[^aeiou] | 匹配除了aeiou這幾個字母以外的任意字符 | </tr> </tbody> </table>
分類 | 代碼/語法 | 說明 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
捕獲 | (exp) | 匹配exp,并捕獲文本到自動命名的組里 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(?<name>exp) | 匹配exp,并捕獲文本到名稱為name的組里,也可以寫成(?'name'exp) | </tr>||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(?:exp) | 匹配exp,不捕獲匹配的文本,也不給此分組分配組號 | </tr>||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
零寬斷言 | (?=exp) | 匹配exp前面的位置 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(?<=exp) | 匹配exp后面的位置 | </tr>||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(?!exp) | 匹配后面跟的不是exp的位置 | </tr>||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(?<!exp) | 匹配前面不是exp的位置 | </tr>||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
注釋 | (?#comment) | 這種類型的分組不對正則表達式的處理產生任何影響,用于提供注釋讓人閱讀 | </tr> </tbody> </table>
代碼/語法 | 說明 | </tr> </tbody>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
*? | 重復任意次,但盡可能少重復 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+? | 重復1次或更多次,但盡可能少重復 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? | 重復0次或1次,但盡可能少重復 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{n,m}? | 重復n到m次,但盡可能少重復 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{n,}? | 重復n次以上,但盡可能少重復 | </tr> </tbody> </table>
名稱 | 說明 | </tr> </tbody>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
IgnoreCase(忽略大小寫) | 匹配時不區分大小寫。 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Multiline(多行模式) | 更改^和$的含義,使它們分別在任意一行的行首和行尾匹配,而不僅僅在整個字符串的開頭和結尾匹配。(在此模式下,$的精確含意是:匹配\n之前的位置以及字符串結束前的位置.) | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Singleline(單行模式) | 更改.的含義,使它與每一個字符匹配(包括換行符\n)。 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IgnorePatternWhitespace(忽略空白) | 忽略表達式中的非轉義空白并啟用由#標記的注釋。 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ExplicitCapture(顯式捕獲) | 僅捕獲已被顯式命名的組。 | </tr> </tbody> </table>
代碼/語法 | 說明 | </tr> </tbody>|||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
\a | 報警字符(打印它的效果是電腦嘀一聲) | </tr>|||||||||||||||||||||||||
\b | 通常是單詞分界位置,但如果在字符類里使用代表退格 | </tr>|||||||||||||||||||||||||
\t | 制表符,Tab | </tr>|||||||||||||||||||||||||
\r | 回車 | </tr>|||||||||||||||||||||||||
\v | 豎向制表符 | </tr>|||||||||||||||||||||||||
\f | 換頁符 | </tr>|||||||||||||||||||||||||
\n | 換行符 | </tr>|||||||||||||||||||||||||
\e | Escape | </tr>|||||||||||||||||||||||||
\0nn | ASCII代碼中八進制代碼為nn的字符 | </tr>|||||||||||||||||||||||||
\xnn | ASCII代碼中十六進制代碼為nn的字符 | </tr>|||||||||||||||||||||||||
\unnnn | Unicode代碼中十六進制代碼為nnnn的字符 | </tr>|||||||||||||||||||||||||
\cN | ASCII控制字符。比如\cC代表Ctrl+C | </tr>|||||||||||||||||||||||||
\A | 字符串開頭(類似^,但不受處理多行選項的影響) | </tr>|||||||||||||||||||||||||
\Z | 字符串結尾或行尾(不受處理多行選項的影響) | </tr>|||||||||||||||||||||||||
\z | 字符串結尾(類似$,但不受處理多行選項的影響) | </tr>|||||||||||||||||||||||||
\G | 當前搜索的開頭 | </tr>|||||||||||||||||||||||||
\p{name} | Unicode中命名為name的字符類,例如\p{IsGreek} | </tr>|||||||||||||||||||||||||
(?>exp) | 貪婪子表達式 | </tr>|||||||||||||||||||||||||
(?<x>-<y>exp) | 平衡組 | </tr>|||||||||||||||||||||||||
(?im-nsx:exp) | 在子表達式exp中改變處理選項 | </tr>|||||||||||||||||||||||||
(?im-nsx) | 為表達式后面的部分改變處理選項 | </tr>|||||||||||||||||||||||||
(?(exp)yes|no) | 把exp當作零寬正向先行斷言,如果在這個位置能匹配,使用yes作為此組的表達式;否則使用no | </tr>|||||||||||||||||||||||||
(?(exp)yes) | 同上,只是使用空表達式作為no | </tr>|||||||||||||||||||||||||
(?(name)yes|no) | 如果命名為name的組捕獲到了內容,使用yes作為表達式;否則使用no | </tr>|||||||||||||||||||||||||
(?(name)yes) | 同上,只是使用空表達式作為no | </tr> </tbody> </table> </div> 原文地址:http://www.jb51.net/tools/zhengze.html#backreference