正則表達式
正則表達式就是一個字符串,同時表示一種模式,可以用來匹配所有滿足該模式的字符串
正則字符串中的字符分為元字符與普通字符;普通字符就是恩...普通的字符;元字符具有特殊的含義,下面是元字符的所有列表(摘自MSDN):
字符 | 說明 |
---|---|
\ |
將下一字符標記為特殊字符、文本、反向引用或八進制轉義符。例如,“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。“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}" 是貪婪匹配,如根據模式"o+"在字符串"loooooove"中檢索滿足模式的子串:“oooooo”;可以在這些控制匹配次數的后面加上'?';來不使用貪婪模式;此時將會最小匹配;在“looooove”中,“o+?”將匹配"o",而不會匹配"oooooo";
(pattern) |
匹配 pattern 并捕獲該匹配的子表達式。可以使用 \1…\9 屬性從結果“匹配”集合中檢索捕獲的匹配。若要匹配括號字符 ( ),請使用“\(”或者“\)”。 |
(?:pattern) |
匹配 pattern 但不捕獲該匹配的子表達式,即它是一個非捕獲匹配,不存儲供以后使用的匹配。這對于用“or”字符 (|) 組合模式部件的情況很有用。例如,'industr(?:y|ies) 是比 'industry|industries' 更經濟的表達式。 |
如正則表達式"<h([1-6])>.*</h\1>"在執行加粗處匹配時會將匹配該模式的字符串保存在一個緩沖區中,稍后可以使用"\1"來引用;如利用該正則匹配"<h1>hellow</h1>";"1"(加粗處)會匹配([1-6]),然后"1"就會被放到緩沖區里;
(?:pattern)表明不緩沖匹配的結果;
(?=pattern) |
執行正向預測先行搜索的子表達式,該表達式匹配處于匹配 pattern 的字符串的起始點的字符串。它是一個非捕獲匹配(也即不緩沖匹配結果),即不能捕獲供以后使用的匹配。例如,'Windows (?=95|98|NT|2000)' 匹配“Windows 2000”中的“Windows”,但不匹配“Windows 3.1”中的“Windows”。預測先行不占用字符,即發生匹配后,下一匹配的搜索緊隨上一匹配之后,而不是在組成預測先行的字符后。 |
(?!pattern) |
執行反向預測先行搜索的子表達式,該表達式匹配不處于匹配 pattern 的字符串的起始點的搜索字符串。它是一個非捕獲匹配,即不能捕獲供以后使用的匹配。例如,'Windows (?!95|98|NT|2000)' 匹配“Windows 3.1”中的 “Windows”,但不匹配“Windows 2000”中的“Windows”。預測先行不占用字符,即發生匹配后,下一匹配的搜索緊隨上一匹配之后,而不是在組成預測先行的字符后。 |
這個怎么說明呢:如正則"模式33(?=pattern)",則僅有在模式33后面的字符串也同時滿足括號里的pattern時模式33才會被匹配(pattern并不在匹配結果中);
如用正則"linux(?=\d+\.\d)"來匹配字符串“linuxubuntu linux212.32”;則只有后一個linux才會被匹配;因為只有它后面的字符串才匹配()總的pattern;(?!pattern)與上相反,僅當上面
(?<=pattern) |
反向預查與正向預查很相似,子模式僅僅作為條件限制,不作為結果輸出,唯一的不同是,正向預查匹配子模式前面的結果作為匹配結果,而反向預查匹配子模式后面的結果作為匹配結果 |
(?<!pattern) |
和(?!pattern)模式差不多; |
x|y |
匹配 x 或 y。例如,'z|food' 匹配“z”或“food”。'(z|f)ood' 匹配“zood”或“food”。x與y可以是模式 |
[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 |
非字邊界匹配。“er\B”匹配“verb”中的“er”,但不匹配“never”中的“er”。 |
\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_]”等效。 |