正則表達式-語法大全
一、基本概念
正則表達式,又稱規則表達式。(英語:Regular Expression,在程式碼中常簡寫為regex、regexp或RE),電腦科學的一個概念。正則表達式通常被用來檢索、替換那些符合某個模式(規則)的文本。
許多程式設計語言都支援利用正則表達式進行字元串操作。例如,在Perl中就內建了一個功能強大的正則表達式引擎。正則表達式這個概念最初是由Unix中的工具軟體(例如sed和grep)普及開的。正則表達式通常縮寫成「regex」,單數有regexp、regex,複數有regexps、regexes、regexen。
二、簡介
正則表達式是對字元串(包括普通字元(例如,a 到 z 之間的字母)和特殊字元(稱為「元字元」))操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個「規則字元串」,這個「規則字元串」用來表達對字元串的一種過濾邏輯。正則表達式是一種文本模式,該模式描述在搜索文本時要匹配的一個或多個字元串。
三、語法介紹
1、常用的元字
|
程式碼
|
說明
|
|
.
|
匹配除換行符以外的任意字元
|
|
\w
|
匹配字母或數字或下劃線或漢字
|
|
\s
|
匹配任意的空白符
|
|
\d
|
匹配數字
|
|
\b
|
匹配單詞的開始或結束
|
|
^
|
匹配字元串的開始
|
|
$
|
匹配字元串的結束
|
舉例:
匹配-QQ號必須為5位到12位數字時:^\d{5,12}$
匹配-固定電話的:0\d\d-\d\d\d\d\d\d\d\d
2、 常用的限定符
|
程式碼/語法
|
說明
|
|
*
|
重複零次或更多次
|
|
+
|
重複一次或更多次
|
|
?
|
重複零次或一次
|
|
{n}
|
重複n次
|
|
{n,}
|
重複n次或更多次
|
|
{n,m}
|
重複n到m次
|
舉例:
匹配-Windows後面跟1個或更多數字:Windows\d+
匹配-一行的第一個單詞:^\w+
3、常用的反義程式碼
|
程式碼/語法
|
說明
|
|
\W
|
匹配任意不是字母,數字,下劃線,漢字的字元
|
|
\S
|
匹配任意不是空白符的字元
|
|
\D
|
匹配任意非數字的字元
|
|
\B
|
匹配不是單詞開頭或結束的位置
|
|
[^x]
|
匹配除了x以外的任意字元
|
|
[^aeiou]
|
匹配除了aeiou這幾個字母以外的任意字元
|
舉例:
匹配- 不包含空白符的字元串: \S+
匹配- 用尖括弧括起來的以a開頭的字元串: <a[^>]+>
4、分組語法
|
分類
|
程式碼/語法
|
說明
|
|
捕獲
|
(exp)
|
匹配exp,並捕獲文本到自動命名的組裡
|
|
(?<name>exp)
|
匹配exp,並捕獲文本到名稱為name的組裡,也可以寫成(?’name’exp)
|
|
|
(?:exp)
|
匹配exp,不捕獲匹配的文本,也不給此分組分配組號
|
|
|
零寬斷言
|
(?=exp)
|
匹配exp前面的位置
|
|
(?<=exp)
|
匹配exp後面的位置
|
|
|
(?!exp)
|
匹配後面跟的不是exp的位置
|
|
|
(?<!exp)
|
匹配前面不是exp的位置
|
|
|
注釋
|
(?#comment)
|
這種類型的分組不對正則表達式的處理產生任何影響,用於提供注釋讓人閱讀
|
舉例:這點開始難度有點大了
匹配-\w+的組名指定為Word: (?’Word’\w+)),
5、懶惰限定符
|
程式碼/語法
|
說明
|
|
*?
|
重複任意次,但儘可能少重複
|
|
+?
|
重複1次或更多次,但儘可能少重複
|
|
??
|
重複0次或1次,但儘可能少重複
|
|
{n,m}?
|
重複n到m次,但儘可能少重複
|
|
{n,}?
|
重複n次以上,但儘可能少重複
|
6、其他
|
程式碼/語法
|
說明
|
|
\a
|
報警字元(列印它的效果是電腦嘀一聲)
|
|
\b
|
通常是單詞分界位置,但如果在字元類里使用代表退格
|
|
\t
|
製表符,Tab
|
|
\r
|
回車
|
|
\v
|
豎向製表符
|
|
\f
|
換頁符
|
|
\n
|
換行符
|
|
\e
|
Escape
|
|
\0nn
|
ASCII程式碼中八進位程式碼為nn的字元
|
|
\xnn
|
ASCII程式碼中十六進位程式碼為nn的字元
|
|
\unnnn
|
Unicode程式碼中十六進位程式碼為nnnn的字元
|
|
\cN
|
ASCII控制字元。比如\cC代表Ctrl+C
|
|
\A
|
字元串開頭(類似^,但不受處理多行選項的影響)
|
|
\Z
|
字元串結尾或行尾(不受處理多行選項的影響)
|
|
\z
|
字元串結尾(類似$,但不受處理多行選項的影響)
|
|
\G
|
當前搜索的開頭
|
|
\p{name}
|
Unicode中命名為name的字元類,例如\p{IsGreek}
|
|
(?>exp)
|
貪婪子表達式
|
|
(?<x>-<y>exp)
|
平衡組
|
|
(?im-nsx:exp)
|
在子表達式exp中改變處理選項
|
|
(?im-nsx)
|
為表達式後面的部分改變處理選項
|
|
(?(exp)yes|no)
|
把exp當作零寬正向先行斷言,如果在這個位置能匹配,使用yes作為此組的表達式;否則使用no
|
|
(?(exp)yes)
|
同上,只是使用空表達式作為no
|
|
(?(name)yes|no)
|
如果命名為name的組捕獲到了內容,使用yes作為表達式;否則使用no
|
|
(?(name)yes)
|
同上,只是使用空表達式作為no
|
四、在線正則校驗
//tool.oschina.net/regex/

