轉義字符:\d
\D: 匹配任何一個非數字字符
點號:匹配任何字符,但一般不匹配行起始符
使用捕獲分組(capturing group)來匹配電話號碼中的某一部分。然後使用後向引用(backreference)對分組中的內容進行引用。要創建捕獲分組,先將一個\d
放在一對圓括號中,這樣就將它放入了一個分組中,後面可以用\1
來對捕獲的內容進行後向引用:
(\d)\d\1
\1
對括號內分組捕獲的內容進行了反向引用。這個正則表達式匹配的是區號707。以下是對該表達式的詳細分析:
-
(\d)
匹配第一個數字並將其捕獲(數字7); -
\d
匹配第二個數字(數字0)但沒有捕獲,因爲沒有括號; -
\1
對捕獲的數字進行反向引用(數字7)。
加號(+
)表示“一個或多個”,星號(*
)表示“零個或多個”。
花括號中的數字表示待查找的數字出現的次數
非: [^0-9]非0-9之間的字符
\D
與\w
的區別是\D
會匹配空格、標點符號(引號、連字符、反斜槓、方括號)等字符,而\w
卻不會,它只匹配字母、數字和下劃線。
字符簡寫式
字符簡寫式 | 描述 |
---|---|
\a | 報警符 |
[\b] | 退格字符 |
\c x | 控制字符 |
\d | 數字字符 |
\D | 非數字字符 |
\o xxx | 字符的八進制值 |
\w | 單詞字符 |
\W | 非單詞字符 |
\0 | 空字符 |
\x xx | 字符的十六進制值 |
\u xxx | 字符的Unicode值 |
匹配各種空白符的簡寫式
字符簡寫式 | 描述 |
---|---|
\f | 換頁符 |
\h | 水平空白符 |
\H | 非水平空白符 |
\n | 換行符 |
\r | 回車符 |
\s | 空白符 |
\S | 非空白符 |
\t | 水平製表符 |
\v | 垂直製表符 |
\V | 非垂直製表符 |
^
和$
,也叫做錨位符(anchor)\b匹配單詞邊界
還可以匹配非單詞邊界。非單詞邊界匹配除單詞邊界之外的位置,比如單詞或者字符串中的字母或數字。要匹配一個非單詞邊界,試一下:
\Be\B
匹配空格和單詞字符,可以創建這樣一個字符組:
[\w\s]
它等同於:
[_a-zA-Z \t\n\r]
用下面的表達式查找0~99的偶數:
\b[24680]\b|\b[1-9][24680]\b
如果你想要兩個字符組的並集,可以這樣做:
[0-3[6-9]]
正則表達式處理器會匹配0到3之間的數字或者6到9之間的數字。
匹配差集(實質上就是減操作):
[a-z&&[^m-r]]
這匹配a到z之間的字符,但其中m到r之間的字符除外
基本量詞
語法 | 描述 |
---|---|
? | 零個或一個(可選) |
+ | 一個或多個 |
* | 零個或多個 |
範圍語法總結
語法 | 描述 |
---|---|
{n} | 精確匹配n次 |
{n,} | 匹配n次或更多次 |
{m,n} | 匹配m至n次 |
{0,1} | 與?相同 (零次或一次) |
{1,0} | 與+相同 (一次或更多) |
{0,} | 與*相同 (零次或更多) |
懶惰量詞
語法 | 描述 |
---|---|
?? | 懶惰匹配零次或一次(可選) |
+? | 懶惰匹配一次或多次 |
*? | 懶惰匹配零次或多次 |
{n}? | 懶惰匹配n次 |
{n,}? | 懶惰匹配n次或多次 |
{m,n}? | 懶惰匹配m至n次 |
佔有量詞就是在普通量詞之後添加一個加號(+)。它不“咀嚼”而是直接“吞嚥”,然後纔想知道“吃”的是什麼。
代碼 | 說明 |
---|---|
. | 匹配除換行符以外的任意字符 |
\w | 匹配字母或數字或下劃線或漢字 |
\s | 匹配任意的空白符 |
\d | 匹配數字 |
\b | 匹配單詞的開始或結束 |
^ | 匹配字符串的開始 |
$ | 匹配字符串的結束 |
代碼/語法 | 說明 |
---|---|
* | 重複零次或更多次 |
+ | 重複一次或更多次 |
? | 重複零次或一次 |
{n} | 重複n次 |
{n,} | 重複n次或更多次 |
{n,m} | 重複n到m次 |
代碼/語法 | 說明 |
---|---|
\W | 匹配任意不是字母,數字,下劃線,漢字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非數字的字符 |
\B | 匹配不是單詞開頭或結束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou這幾個字母以外的任意字符 |
例子:\S+匹配不包含空白符的字符串。
<a[^>]+>匹配用尖括號括起來的以a開頭的字符串。
分類 | 代碼/語法 | 說明 |
---|---|---|
捕獲 | (exp) | 匹配exp,並捕獲文本到自動命名的組裏 |
(?<name>exp) | 匹配exp,並捕獲文本到名稱爲name的組裏,也可以寫成(?'name'exp) | |
(?:exp) | 匹配exp,不捕獲匹配的文本,也不給此分組分配組號 | |
零寬斷言 | (?=exp) | 匹配exp前面的位置 |
(?<=exp) | 匹配exp後面的位置 | |
(?!exp) | 匹配後面跟的不是exp的位置 | |
(?<!exp) | 匹配前面不是exp的位置 | |
註釋 | (?#comment) | 這種類型的分組不對正則表達式的處理產生任何影響,用於提供註釋讓人閱讀 |