字符 | 含義 |
---|---|
\n | 換行符 |
\r | 回車 |
\s | 匹配任何空白字符,包括空格、制表符握侧、換頁符等等 |
\S | 匹配任何非空白字符 |
$ | 匹配輸入字符串的結尾位置责嚷,比如 abc$ 可以匹配到 123abc
|
^ | 匹配輸入字符串的開始位置鸳兽,但在方括號中使用,表示除去表達式中的字符罕拂。例 ^abc 可以匹配 abc 123贸铜,[^abc] 可以匹配 bcdef
|
. | 匹配任何 單個字符 (除新行符 (\r\n) 外) |
* | 匹配 零個或多個 前面的字符。.* 是匹配范圍最廣的模式之一, 因為它可以匹配零個或多個任意字符 |
+ | 匹配 一個或多個 前面的字符 |
聂受? | 匹配 零個或一個 前面的字符蒿秦,可以理解為前面的字符是可選的。例 a(bc)? 可以匹配 a xxxx 或者 abc xxxxx |
{n} | 精確匹配n次 |
{n,} | 匹配最少n次 |
{n,m} | 匹配n到m次 |
[...] | [abc] 表示 "a, b, c 的中任何一個字符"蛋济。使用破折號來創(chuàng)建范圍棍鳖,例如[a-z] 表示 "在小寫字母 a 和 z (包含的) 之間的任何一個字符"。 列表和范圍可以組合在一起碗旅,例如 [a-zA-Z0-9_] 表示 "字母, 數(shù)字或下劃線中的任何一個字符"渡处。^用在方括號里表示排除 |
\d | 匹配任意一個數(shù)字 (相當于類 [0-9]) |
\w | 匹配任意一個字母數(shù)字下劃線,等同于 [a-zA-Z0-9_] |
\b | 代表著單詞的開頭或結尾祟辟,也就是單詞的分界處医瘫,通常用來避免意外地匹配到在其他單詞內的某個單詞,例 \bcat\b 對于 123catabc旧困,123_cat_abc都無法匹配醇份,對于 123 cat abc,123-cat-abc 則可以匹配吼具。即cat前后要用除了[a-zA-Z0-9_]以外的字符分隔開才能匹配 |
I | 將兩個或多個可選項目分隔開來. 如果可選項目中 任何一個 滿足條件, 則會形成匹配 |
貪婪:默認情況下 *僚纷、?、+ 和 {n,m} 是貪婪的拗盒,因為它們消耗到最后一個能滿足整個模式的所有字符怖竭。要讓它們停在 首個 可能的字符, 要在它們后面加上問號。 例如模式 <.+> 表示 "搜索一個 <, 接著一個或多個任意字符, 然后是一個 >"陡蝇,這會匹配整個字符串 "<tag>text</tag>"痊臭。在加號后加上問號: <.+?>. 這樣會讓匹配在第一個 '>' 處停止, 然后再從 '<' 開始匹配哮肚,因此只匹配<tag> 和 </tag>
預測和回顧斷言: (?=...)、(?!...)广匙、(?<=...) 和 (?<!...) 被稱為斷言绽左,因為它們要求符合某個條件但不消耗任何字符。例如
abc(?=.\*xyz)
中含有預測斷言, 它要求在字符串 abc 右邊的某個位置存在字符串 xyz (如果不存在艇潭, 則匹配失敗)拼窥。(?=...) 被稱為 正預測斷言, 因為它要求指定的模式存在. 相反地蹋凝,(?!...) 是 負預測斷言鲁纠, 因為它要求指定的模式不存在。同樣地, (?<=...) 和 (?<!...) 分別是正的和負的 回顧斷言, 因為它們檢查當前位置的 左邊而不是右邊鳍寂「暮回顧比預測受到更多的限制,因為它們不支持可變大小的限定符迄汛, 例如*, ? 和 +捍壤。