字符 | 描述 |
---|---|
\ | 將下一個字符標記為一個特殊字符、或一個原義字符、或一個向后引用、或一個八進制轉義符。例如,“n”匹配字符“n”。“\n”匹配一個換行符。序列“\”匹配“\”而“(”則匹配“(”。 |
^ | 匹配輸入字符串的開始位置。如果設置了RegExp對象的Multiline屬性,^也匹配“\n”或“\r”之后的位置。 |
$ | 匹配輸入字符串的結束位置。如果設置了RegExp對象的Multiline屬性,$也匹配“\n”或“\r”之前的位置。 |
* | 匹配前面的子表達式零次或多次。例如,zo** 能匹配“z”以及“zoo”。*等價于{0,}。 |
+ | 匹配前面的子表達式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等價于{1,}。 |
? | 匹配前面的子表達式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等價于{0,1}。 |
{n} | n是一個非負整數。匹配確定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的兩個o。 |
{n,} | n是一個非負整數。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o?!皁{1,}”等價于“o+”。“o{0,}”則等價于“o*”。 |
{n,m} | m和n均為非負整數,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”將匹配“fooooood”中的前三個o。“o{0,1}”等價于“o?”。請注意在逗號和兩個數之間不能有空格。 |
? | 當該字符緊跟在任何一個其他限制符(*,+,?,{n},{n,},{n,m})后面時,匹配模式是非貪婪 的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對于字符串“oooo”,“o+?”將匹配單個“o”,而“o+”將匹配所有“o”。 |
. | 匹配除“\n”之外的任何單個字符。要匹配包括“\n”在內的任何字符,請使用像“[.\n]”的模式。 |
(pattern) | 匹配pattern并獲取這一匹配。所獲取的匹配可以從產生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性。要匹配圓括號字符,請使用“(”或“)”。 |
(?:pattern) | 匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以后使用。這在使用或字符“()”來組合一個模式的各個部分是很有用。例如“industr(?:yies)”就是一個比“industry industries”更簡略的表達式。 |
(?=pattern) | 正向預查,在任何匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如,“Windows(?=95/98/NT/2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始。 |
(?!pattern) | 負向預查,在任何不匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如“Windows(?!95/98/NT/2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始 |
x | y | 匹配x或y。例如,“z|food”能匹配“z”或“food”?!?z|f)ood”則匹配“zood”或“food”。 |
[xyz] | 字符集合。匹配所包含的任意一個字符。例如,“[abc]”可以匹配“plain”中的“a”。 |
[^xyz] | 負值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“p”。 |
[a-z] | 字符范圍。匹配指定范圍內的任意字符。例如,“[a-z]”可以匹配“a”到“z”范圍內的任意小寫字母字符。 |
[^a-z] | 負值字符范圍。匹配任何不在指定范圍內的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范圍內的任意字符。 |
\b | 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。 |
\B | 匹配非單詞邊界?!癳r\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。 |
\cx | 匹配由x指明的控制字符。例如,\cM匹配一個Control-M或回車符。x的值必須為A-Z或a-z之一。否則,將c視為一個原義的“c”字符。 |
\d | 匹配一個數字字符。等價于[0-9]。 |
\D | 匹配一個非數字字符。等價于[^0-9]。 |
\f | 匹配一個換頁符。等價于\x0c和\cL。 |
\n | 匹配一個換行符。等價于\x0a和\cJ。 |
\r | 匹配一個回車符。等價于\x0d和\cM。 |
\s | 匹配任何空白字符,包括空格、制表符、換頁符等等。等價于[\f\n\r\t\v]。 |
\S | 匹配任何非空白字符。等價于[^\f\n\r\t\v]。 |
\t | 匹配一個制表符。等價于\x09和\cI。 |
\v | 匹配一個垂直制表符。等價于\x0b和\cK。 |
\w | 匹配包括下劃線的任何單詞字符。等價于“[A-Za-z0-9_]” 即數字字母下劃線。 |
\W | 匹配任何非單詞字符。等價于“[^A-Za-z0-9_]”。 |
\xn | 匹配n,其中n為十六進制轉義值。十六進制轉義值必須為確定的兩個數字長。例如,“\x41”匹配“A”。“\x041”則等價于“\x04&1”。正則表達式中可以使用ASCII編碼。. |
\num | 匹配num,其中num是一個正整數。對所獲取的匹配的引用。例如,“(.)\1”匹配兩個連續的相同字符。 |
\n | 標識一個八進制轉義值或一個向后引用。如果\n之前至少n個獲取的子表達式,則n為向后引用。否則,如果n為八進制數字(0-7),則n為一個八進制轉義值。 |
\nm | 標識一個八進制轉義值或一個向后引用。如果\nm之前至少有nm個獲得子表達式,則nm為向后引用。如果\nm之前至少有n個獲取,則n為一個后跟文字m的向后引用。如果前面的條件都不滿足,若n和m均為八進制數字(0-7),則\nm將匹配八進制轉義值nm。 |
\nml | 如果n為八進制數字(0-3),且m和l均為八進制數字(0-7),則匹配八進制轉義值nml。 |
\un | 匹配n,其中n是一個用四個十六進制數字表示的Unicode字符。例如,\u00A9匹配版權符號(?)。 |
1.簡單的轉義字符
表達式 | 可匹配 |
---|---|
\r | 回車符 |
\n | 換行符 |
\t | 制表符 |
\\ | 代表 "" 本身 |
^ | 匹配 ^ 符號本身 |
$ | 匹配 $ 符號本身 |
\. | 匹配小數點(.)本身 |
2.能夠與 '多種字符' 匹配的表達式
表達式 | 可匹配 |
---|---|
\d | 任意一個數字,0~9 中的任意一個 |
\w | 任意一個字母或數字或下劃線,也就是 AZ,az,0~9,_ 中任意一個 |
\s | 包括空格、制表符、換頁符等空白字符的其中任意一個 |
. | 小數點可以匹配除了換行符(\n)以外的任意一個字符 |
3.自定義能夠匹配 '多種字符' 的表達式
使用方括號 [ ] 包含一系列字符,能夠匹配其中任意一個字符。用 [^ ] 包含一系列字符,則能夠匹配其中字符之外的任意一個字符。同樣的道理,雖然可以匹配其中任意一個,但是只能是一個,不是多個。
表達式 | 可匹配 |
---|---|
[ab5@] | 匹配 "a" 或 "b" 或 "5" 或 "@" |
[^abc] | 匹配 "a","b","c" 之外的任意一個字符 |
[f-k] | 匹配 "f"~"k" 之間的任意一個字母 |
[^A-F0-3] | 匹配 "A""F","0""3" 之外的任意一個字符 |
4.修飾匹配次數的特殊符號
注意:? 當該字符緊跟在任何一個其他限制符(*,+,?,{n},{n,},{n,m})后面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對于字符串“oooo”,“o+?”將匹配單個“o”,而“o+”將匹配所有“o”。
表達式 | 作用 |
---|---|
{n} | 表達式重復n次,比如: "\w{2}" 相當于 "\w\w"; "a{5}" 相當于 "aaaaa" |
{m,n} | 表達式至少重復m次,最多重復n次,比如: "ba{1,3}"可以匹配 "ba"或"baa"或"baaa" |
{m,} | 表達式至少重復m次,比如: "\w\d{2,}"可以匹配 "a12","_456","M12344"... |
? | 匹配表達式0次或者1次,相當于 {0,1},比如: "a[cd]?"可以匹配 "a","ac","ad" |
+ | 表達式至少出現1次,相當于 {1,},比如: "a+b"可以匹配 "ab","aab","aaab"... |
* | 表達式不出現或出現任意次,相當于 {0,},比如: "^*b"可以匹配 "b","^^^b"... |
5.其他一些代表抽象意義的特殊符號
注意 : 當自定義匹配多種字符時(即使用
[]
時)^
表示取反之意;
否則表示匹配字符串開始的地方
- 豎線
| 或者 |
表達式 | 作用 |
---|---|
^ | 與字符串開始的地方匹配,不匹配任何字符 |
$ | 與字符串結束的地方匹配,不匹配任何字符 |
\b | 匹配一個單詞邊界,也就是單詞和空格之間的位置,不匹配任何字符 |
| | 左右兩邊表達式之間 "或" 關系,匹配左邊或者右邊 |
( ) | (1). 在被修飾匹配次數的時候,括號中的表達式可以作為整體被修飾 (2). 取匹配結果的時候,括號中的表達式匹配到的內容可以被單獨得到 |
6.正則表達式中的一些高級規則
- 匹配次數中的貪婪模式
在使用修飾匹配次數的特殊符號時,有幾種表示方法可以使同一個表達式能夠匹配不同的次數,比如:"{m,n}", "{m,}", "?", "*", "+",具體匹配的次數隨被匹配的字符串而定。這種重復匹配不定次數的表達式在匹配過程中,總是盡可能多的匹配。比如,針對文本 "dxxxdxxxd",舉例如下:
表達式 | 匹配結果 |
---|---|
(d)(\w+) | "\w+" 將匹配第一個 "d" 之后的所有字符 "xxxdxxxd" |
(d)(\w+)(d) | "\w+" 將匹配第一個 "d" 和最后一個 "d" 之間的所有字符 "xxxdxxx"。雖然 "\w+" 也能夠匹配上最后一個 "d",但是為了使整個表達式匹配成功,"\w+" 可以 "讓出" 它本來能夠匹配的最后一個 "d" |
- 匹配次數中的非貪婪模式:
在修飾匹配次數的特殊符號后再加上一個 "?" 號,則可以使匹配次數不定的表達式盡可能少的匹配,使可匹配可不匹配的表達式,盡可能的 "不匹配"。這種匹配原則叫作 "非貪婪" 模式,也叫作 "勉強" 模式。如果少匹配就會導致整個表達式匹配失敗的時候,與貪婪模式類似,非貪婪模式會最小限度的再匹配一些,以使整個表達式匹配成功。舉例如下,針對文本 "dxxxdxxxd" 舉例:
表達式 | 匹配結果 |
---|---|
(d)(\w+?) | "\w+?" 將盡可能少的匹配第一個 "d" 之后的字符,結果是:"\w+?" 只匹配了一個 "x" |
(d)(\w+?)(d) | 為了讓整個表達式匹配成功,"\w+?" 不得不匹配 "xxx" 才可以讓后邊的 "d" 匹配,從而使整個表達式匹配成功。因此,結果是:"\w+?" 匹配 "xxx" |
- 反向引用 \1, \2...
表達式在匹配時,表達式引擎會將小括號 "( )" 包含的表達式所匹配到的字符串記錄下來。在獲取匹配結果的時候,小括號包含的表達式所匹配到的字符串可以單獨獲取。這一點,在前面的舉例中,已經多次展示了。在實際應用場合中,當用某種邊界來查找,而所要獲取的內容又不包含邊界時,必須使用小括號來指定所要的范圍。比如前面的 "<td>(.*?)</td>"。
其實,"小括號包含的表達式所匹配到的字符串" 不僅是在匹配結束后才可以使用,在匹配過程中也可以使用。表達式后邊的部分,可以引用前面 "括號內的子匹配已經匹配到的字符串"。引用方法是 "" 加上一個數字。"\1" 引用第1對括號內匹配到的字符串,"\2" 引用第2對括號內匹配到的字符串……以此類推,如果一對括號內包含另一對括號,則外層的括號先排序號。換句話說,哪一對的左括號 "(" 在前,那這一對就先排序號。
舉例1:表達式 "('|")(.*?)(\1)" 在匹配 " 'Hello', "World" " 時,
匹配結果是:成功;匹配到的內容是:" 'Hello' "。再次匹配下一個時,可以匹配到 " "World" "。
舉例2:表達式 "(\w)\1{4,}" 在匹配 "aa bbbb abcdefg ccccc 111121111 999999999" 時,
匹配結果是:成功;匹配到的內容是 "ccccc"。再次匹配下一個時,將得到 999999999。這個表達式要求 "\w" 范圍的字符至少重復5次,點擊測試 注意與 "\w{5,}" 之間的區別。
舉例3:表達式 "<(\w+)\s*(\w+(=('|").*?\4)?\s*)*>.*?</\1>" 在匹配 "<td id='td1' style="bgcolor:white"></td>" 時,
匹配結果是成功。如果 "<td>" 與 "</td>" 不配對,則會匹配失??;如果改成其他配對,也可以匹配成功。
7.其他通用規則
形式 | 字符范圍 |
---|---|
\xXX | 編號在 0 ~ 255 范圍的字符,比如: 空格可以使用 "\x20" 表示 |
\uXXXX | 任何字符可以使用 "\u" 再加上其編號的4位十六進制數表示,比如:"\u4E2D" |
\S | 匹配所有非空白字符("\s" 可匹配各個空白字符) |
\D | 匹配所有的非數字字符 |
\W | 匹配所有的字母、數字、下劃線以外的字符 |
\B | 匹配非單詞邊界,即左右兩邊都是 "\w" 范圍或者左右兩邊都不是 "\w" 范圍時的字符縫隙 |
字符 | 說明 |
---|---|
^ | 匹配輸入字符串的開始位置。要匹配 "^" 字符本身,請使用 "^" |
$ | 匹配輸入字符串的結尾位置。要匹配 "$" 字符本身,請使用 "$" |
( ) | 標記一個子表達式的開始和結束位置。要匹配小括號,請使用 "\(" 和 "\)" |
[ ] | 用來自定義能夠匹配 '多種字符' 的表達式。要匹配中括號,請使用 "\[" 和 "\]" |
{ } | 修飾匹配次數的符號。要匹配大括號,請使用 "\{" 和 "\}" |
. | 匹配除了換行符(\n)以外的任意一個字符。要匹配小數點本身,請使用 "\." |
? | 修飾匹配次數為 0 次或 1 次。要匹配 "?" 字符本身,請使用 "?" |
+ | 修飾匹配次數為至少 1 次。要匹配 "+" 字符本身,請使用 "\+" |
* | 修飾匹配次數為 0 次或任意次。要匹配 "" 字符本身,請使用 "\*" |
| | 左右兩邊表達式之間 "或" 關系。匹配 "|" 本身,請使用 "|" |