規則運算式語言 - 快速參考

規則運算式是規則運算式引擎嘗試在輸入文字中比對的模式。 模式是由一個或多個字元常值、運算子或建構所組成。 如需簡介,請參閱 .NET 規則運算式

此快速參考中的每一節都列出您可以用於定義規則運算式的特定某類字元、運算子和建構。

我們也以兩種格式提供這項資訊,您可以下載並列印以方便參考:

逸出字元

正則表達式中的反斜杠字元 (\) 表示其後面的字元是特殊字元(如下表所示),或應該以字面方式解譯。 如需詳細資訊,請參閱逸出字元

逸出的字元 描述 模式 比對
\a 比對警示字元 \u0007。 \a "Error!" + '\u0007' 中的 "\u0007"
\b 在字元類別中,比對退格鍵 \u0008。 [\b]{3,} "\b\b\b\b" 中的 "\b\b\b\b"
\t 比對定位點 \u0009。 (\w+)\t "item1\titem2\t" 中的 "item1\t""item2\t"
\r 比對歸位字元 \u000D (\r 不等於新行字元 \n。) \r\n(\w+) "\r\nThese are\ntwo lines." 中的 "\r\nThese"
\v 比對垂直定位點 \u000B。 [\v]{2,} "\v\v\v" 中的 "\v\v\v"
\f 比對換頁字元 \u000C。 [\f]{2,} "\f\f\f" 中的 "\f\f\f"
\n 比對新行字元 \u000A。 \r\n(\w+) "\r\nThese are\ntwo lines." 中的 "\r\nThese"
\e 比對逸出字元 \u001B。 \e "\x001B" 中的 "\x001B"
\nnn 使用八進位表示法指定字元 (nnn 由兩位數或三位數組成)。 \w\040\w "a bc d" 中的 "a b""c d"
\xnn 使用十六進位表示指定字元 (nn 由剛好兩位數組成)。 \w\x20\w "a bc d" 中的 "a b""c d"
\cX

\cx
比對 Xx所指定的 ASCII 控制字元,其中 Xx 是控制字元的字母。 \cC "\x0003" 中的 "\x0003" (Ctrl-C)
\unnnn 使用十六進位表示比對 Unicode 字元 (剛好四位數,如 nnnn所表示)。 \w\u0020\w "a bc d" 中的 "a b""c d"
\ 當後面加上的字元不是這張表和此主題其他表格中指出的逸出字元時,則比對該字元。 例如, \*\x2A 相同,而 \.\x2E 相同。 這可讓規則運算式引擎釐清語言項目 (例如 * 或 ?) 和字元常值 (以 \*\? 表示)。 \d+[\+-x\*]\d+ "(2+2) * 3*9" 中的 "2+2""3*9"

字元類別

字元類別會比對一組字元中的任何一個字元。 字元類別包含下表列出的語言項目。 如需詳細資訊,請參閱字元類別

字元類別 描述 模式 比對
[character_group] 比對character_group中的任何單一字元。 根據預設,比對會區分大小寫。 [ae] "gray" 中的 "a"

"lane" 中的 "a""e"
[^character_group] 否定:比對不在 character_group 中的任何單一字元。 根據預設,character_group 中的字元會區分大小寫。 [^aei] "reign" 中的 "r""g""n"
[第一-last] 字元範圍:比對範圍中第一個到最後一個字元的任何單一字元。 [A-Z] "AB123" 中的 "A""B"
. 通配符:比對 以外的\n任何單一字元。

若要比對常值句號字元 (. 或 \u002E),您必須在它前面加上逸出字元 (\.)。
a.e "nave" 中的 "ave"

"water" 中的 "ate"
\p{name} 比對 Unicode 一般類別或名稱指定之具名區塊中的任何單一字元。 \p{Lu}

\p{IsCyrillic}
"City Lights" 中的 "C""L"

"ДЖem" 中的 "Д""Ж"
\P{name} 比對不在 Unicode 一般類別或名稱指定之具名區塊中的任何單一字元。 \P{Lu}

\P{IsCyrillic}
"City" 中的 "i""t""y"

"ДЖem" 中的 "e""m"
\w 比對任何 單字字元 \w "ID A1.3" 中的 "I""D""A""1""3"
\W 比對任何 非單字字元 \W "ID A1.3" 中的 " ""."
\s 比對任何 空格符 \w\s "ID A1.3" 中的 "D "
\S 比對任何 非空格符 \s\S "int __ctr" 中的 " _"
\d 符合任何 十進位數 \d "4 = IV" 中的 "4"
\D 比對十進位數以外的任何字元。 \D "4 = IV" 中的 " ""="" ""I""V"

錨點

錨點 (即原子零寬度判斷提示) 會造成根據字串中的目前位置來決定比對成功或失敗,但不會造成引擎在字串中前進或是取用字元。 下表列出的 metacharacter 是錨點。 如需詳細資訊,請參閱錨點

判斷提示 描述 模式 比對
^ 根據預設,比對必須在字串的開頭開始;在多行模式中,它必須在一行的開頭開始。 ^\d{3} "901-333-" 中的 "901"
$ 根據預設,比對必須發生在字串的結尾或字串結尾的 \n 之前;在多行模式中,它必須發生在一行的結尾之前,或一行結尾的 \n 之前。 -\d{3}$ "-901-333" 中的 "-333"
\A 比對必須發生在字串開頭。 \A\d{3} "901-333-" 中的 "901"
\Z 比對必須發生在字串結尾,或發生在字串結尾的 \n 之前。 -\d{3}\Z "-901-333" 中的 "-333"
\z 比對必須發生在字串結尾。 -\d{3}\z "-901-333" 中的 "-333"
\G 比對必須發生在上一個比對結束的點,或者如果先前沒有相符專案,則發生在相符開始的字串中的位置。 \G\(\d\) "(1)(3)(5)[7](9)" 中的 "(1)""(3)""(5)"
\b 比對必須發生在 \w (英數) 和 \W (非英數) 字元之間的界限上。 \b\w+\s\w+\b "them theme them them" 中的 "them theme""them them"
\B 比對不可以發生在 \b 界限上。 \Bend\w*\b "end sends endure lender" 中的 "ends""ender"

群組建構

分組建構會描寫規則運算式的子運算式,而且通常會擷取輸入字串的子字串。 分組建構包含下表列出的語言元素。 如需詳細資訊,請參閱群組建構

分組建構 描述 模式 比對
( subexpression) 擷取符合的子運算式,並指派以一為起始的序號給它。 (\w)\1 "deep" 中的 "ee"
(?<名稱>子運算式)

(?'名稱'子運算式)
將符合的子運算式擷取到具名群組中。 (?<double>\w)\k<double> "deep" 中的 "ee"
(?<名稱1-名稱2>子運算式)

(?'名稱1-名稱2'子運算式)
定義對稱群組定義。 如需詳細資訊,請參閱 Grouping Constructs中的<對稱群組定義>一節。 (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ "3+2^((1-3)*(3-1))" 中的 "((1-3)*(3-1))"
(?: subexpression) 定義非擷取型群組。 Write(?:Line)? "Console.WriteLine()" 中的 "WriteLine"

"Console.Write(value)" 中的 "Write"
(?imnsx-imnsx: subexpression) 套用或停用 子運算式內指定的選項。 如需詳細資訊,請參閱 Regular Expression Options A\d{2}(?i:\w+)\b "A12xl A12XL a12xl" 中的 "A12xl""A12XL"
(?= subexpression) 零寬度右合樣 (Positive Lookahead) 判斷提示。 \b\w+\b(?=.+and.+) "cats", "dogs"
in
"cats, dogs and some mice."
(?! subexpression) 零寬度右不合樣 (Negative Lookahead) 判斷提示。 \b\w+\b(?!.+and.+) "and"、 、 "some""mice"
in
"cats, dogs and some mice."
(?<= subexpression) 零寬度左合樣 (Positive Lookbehind) 判斷提示。 \b\w+\b(?<=.+and.+)

———————————

\b\w+\b(?<=.+and.*)
"some", "mice"
in
"cats, dogs and some mice."
————————————
"and"、 、 "some""mice"
in
"cats, dogs and some mice."
(?<! subexpression) 零寬度左不合樣 (Negative Lookbehind) 判斷提示。 \b\w+\b(?<!.+and.+)

———————————

\b\w+\b(?<!.+and.*)
"cats"、 、 "dogs""and"
in
"cats, dogs and some mice."
————————————
"cats", "dogs"
in
"cats, dogs and some mice."
(?> subexpression) 不可部分完成的群組。 '(?>a|ab)c "ac" in"ac"

中沒有任何專案"abc"

一目了然

當正則表達式引擎叫用 查詢表達式時,它會採用從目前位置到達原始字串的開頭(lookbehind)或 end (lookahead) 的子字元串,然後使用查詢模式在該子字元串上執行 Regex.IsMatch 。 然後,這個子表達式的結果成功取決於它是正判斷提示還是負面判斷提示。

Lookaround 名稱 函式
(?=check) 正面外觀 判斷提示字串中目前位置緊隨其後的是 「檢查」
(?<=check) 正面Lookbehind 判斷提示字串中目前位置前面緊接的專案為 “check”
(?!check) 負面 Lookahead 判斷提示字串中目前位置緊隨其後的不是 「檢查」
(?<!check) 負面Lookbehind 判斷提示字串中目前位置前面緊接的專案不是 「檢查」

比對之後, 即使模式的其餘部分因為相符而失敗,也不會重新評估不可部分完成的群組 。 當數量值發生在不可部分完成的群組或模式的其餘部分時,這可能會大幅改善效能。

數量詞

數量詞指定上一個項目 (可能是字元、群組或字元類別) 必須在輸入字串中出現多少次,才算符合。 數量詞包含下表列出的語言項目。 如需詳細資訊,請參閱數量詞

數量詞 描述 模式 比對
* 比對上一個項目零次或多次。 a.*c "abcbc" 中的 "abcbc"
+ 比對上一個項目一次或多次。 "be+" "been" 中的 "bee""bent" 中的 "be"
? 比對上一個項目零次或一次。 "rai?" "rain" 中的 "rai"
{n} 比對上一個項目剛好 n 次。 ",\d{3}" "1,043.6" 中的 ",043""9,876,543,210" 中的 ",876"",543"",210"
{n,} 比對上一個項目至少 n 次。 "\d{2,}" "166"、 、 "29""1930"
{n,m} 比對上一個項目至少 n 次,但不超過 m 次。 "\d{3,5}" "166", "17668"

"193024" 中的 "19302"
*? 比對上一個項目零次以上,但越少次越好。 a.*?c "abcbc" 中的 "abc"
+? 比對上一個項目一次或多次,但越少次越好。 "be+?" "been" 中的 "be""bent" 中的 "be"
?? 比對上一個項目零次或一次,但越少次越好。 "rai??" "rain" 中的 "ra"
{n}? 比對前一個項目剛好 n 次。 ",\d{3}?" "1,043.6" 中的 ",043""9,876,543,210" 中的 ",876"",543"",210"
{n,}? 比對前一個項目至少 n 次,但次數愈少愈好。 "\d{2,}?" "166"、 、 "29""1930"
{n,m}? 比對前一個項目 n 次到 m 次,但越少次越好。 "\d{3,5}?" "166", "17668"

"193024" 中的 "193""024"

反向參考建構

反向參考可於後來在相同規則運算式中再識別先前符合的子運算式。 下表列出 .NET 中規則運算式所支援的反向參考建構。 如需詳細資訊,請參閱 Backreference Constructs

反向參考建構 描述 模式 比對
\number 反向參考。 比對編號子運算式的值。 (\w)\1 "seek" 中的 "ee"
\k<name> 命名的反向參考。 比對具名運算式的值。 (?<char>\w)\k<char> "seek" 中的 "ee"

替代建構

替代建構會修改規則運算式來啟用二選一比對。 這些建構包含下表列出的語言元素。 如需詳細資訊,請參閱替代建構

交替建構 描述 模式 比對
| 比對由分隔號 (|) 字元所隔開的任何一個項目。 th(e|is|at) "this is the day." 中的 "the""this"
(?(expression)yes|no)

(?(表達式))
如果 expression 所指定的規則運算式模式相符,則比對 yes ,否則比對選擇性的 no 部分。 expression 會解譯為零寬度判斷提示。

若要避免具名或編號擷取群組的模棱兩可,您可以選擇性地使用明確的判斷提示,如下所示:
(?( (?=expression) )yes|no)
(?(A)A\d{2}\b|\b\d{3}\b) "A10 C103 910" 中的 "A10""910"
(?(name)yes|no)

(?(名稱))
如果 name (具名或編號擷取群組) 有相符項目,則比對 yes,否則比對選擇性的 no (?<quoted>")?(?(quoted).+?"|\S+\s) "Dogs.jpg \"Yiska playing.jpg\"" 中的 "Dogs.jpg ""\"Yiska playing.jpg\""

替代

替代是取代模式中支援的規則運算式語言元素。 如需詳細資訊,請參閱替代。 下表列出的 metacharacter 是原子零寬度判斷提示。

字元 描述 模式 取代模式 輸入字串 結果字串
$number 替代群組 number所比對的子字串。 \b(\w+)(\s)(\w+)\b $3$2$1 "one two" "two one"
${name} 替代具名群組 name所比對的子字串。 \b(?<word1>\w+)(\s)(?<word2>\w+)\b ${word2} ${word1} "one two" "two one"
$$ 替代常值 "$"。 \b(\d+)\s?USD $$$1 "103 USD" "$103"
$& 替代整個符合項目的複本。 \$?\d*\.?\d+ **$&** "$1.30" "**$1.30**"
$` 替代輸入字串中符合字串前面的所有文字。 B+ $` "AABBCC" "AAAACC"
$' 替代輸入字串中符合字串後面的所有文字。 B+ $' "AABBCC" "AACCCC"
$+ 替代已擷取的最後一個群組。 B+(C+) $+ "AABBCCDD" "AACCDD"
$_ 替代整個輸入字串。 B+ $_ "AABBCC" "AAAABBCCCC"

規則運算式選項

您可以指定選項,以控制規則運算式引擎如何解譯規則運算式模式。 這些選項中有許多可以指定為內嵌 (在規則運算式模式中) 或是一個或多個 RegexOptions 常數。 這個快速參考只列出內嵌選項。 如需內嵌和 RegexOptions 選項的詳細資訊,請參閱規則運算式選項

您可以透過兩種方式指定內嵌選項:

  • 使用其他建構(?imnsx-imnsx),其中選項或選項集合前面的減號 (-) 會關閉這些選項。 例如,(?i-mn) 會開啟不區分大小寫的比對 (i)、關閉多行模式 (m),以及關閉未命名的群組擷取 (n)。 選項會從定義該選項的位置開始套用至規則運算式模式並且保持生效,直到模式結尾或出現另一個建構反轉選項為止。
  • 使用群組建構(?imnsx-imnsx:subexpression),只針對指定的群組定義選項。

.NET 正則表示式引擎支援下列內嵌選項:

選項 描述 模式 比對
i 使用不區分大小寫的比對方式。 \b(?i)a(?-i)a\w+\b "aardvark AAAuto aaaAuto Adam breakfast" 中的 "aardvark""aaaAuto"
m 使用多行模式。 ^$ 會比對行的開頭與結尾,而不是字串的開始和結尾。 如需範例,請參閱規則運算式選項中的<多行模式>一節。
n 不擷取未命名的群組。 如需範例,請參閱規則運算式選項中的<僅明確擷取>一節。
s 使用單行模式。 如需範例,請參閱規則運算式選項中的<單行模式>一節。
x 忽略規則運算式模式中未逸出的空白字元。 \b(?x) \d+ \s \w+ "1 aardvark 2 cats IV centurions" 中的 "1 aardvark""2 cats"

其他建構

其他建構會修改規則運算式模式或提供其相關資訊。 下表列出 .NET 所支援的其他建構。 如需詳細資訊,請參閱其他建構

建構 定義 範例
(?imnsx-imnsx) 在模式中間設定或停用選項,例如不區分大小寫。如需詳細資訊,請參閱規則運算式選項 \bA(?i)b\w+\b 會比對 "ABA Able Act" 中的 "ABA""Able"
(?#comment) 內嵌註解。 註解會在第一個右括號結束。 \bA(?#Matches words starting with A)\w+\b
# [至行尾] X 模式註解。 註解從未逸出的 # 開始,並延續到行尾。 (?x)\bA\w+\b#Matches words starting with A

另請參閱