共用方式為


在規則運算式中執行字元逸出

規則運算式中的反斜線 (\) 表示下列其中之一:

  • 它後面所接的字元是特殊字元,如下節中的資料表所示。 比方說,\b 是表示規則運算式比對應該在文字邊界上開始的一個錨點,\t 代表索引標籤,而 \x020 代表空間。

  • 一個字元應該依其字面來解譯,否則會被解譯為未逸出的語言結構。 例如,括號 ({) 開始定義數量詞,但是反斜線後面接著一個括號 (\{) 則表示規則運算式引擎應該與括號相符。 同樣地,單一反斜線標記逸出的語言建構之開頭,但兩個反斜線 (\\) 表示規則運算式引擎應該符合反斜線。

注意

逸出字元會在規則運算式模式而不是在取代模式中被辨識。

.NET 中的逸出字元

下表列出 .NET 中的規則運算式所支援的逸出字元。

字元或序列 描述
下列字元以外的所有字元:

. $ ^ { [ ( | ) * + ? \
不同於列在 [字元或序列] 資料行中的其他字元在規則運算式中沒有任何特殊的意義;它們符合其本身。

[字元或序列] 資料行中所包含的字元是規則運算式的特殊語言項目。 若要在規則運算式中進行比對,它們必須逸出或包含在正字元群組。 例如,規則運算式 \$\d+[$]\d+ 符合「$1200」。
\a 符合警鈴 (警示) 字元 \u0007
\b [character_group] 字元類別,比對退格鍵 \u0008。 (請參閱字元類別。)在字元類別之外, \b 符合文字邊界錨點。 (請參閱錨點。)
\t 符合索引標籤, \u0009
\r 符合歸位字元, \u000D。 請注意,\r 不等於新行字元 \n
\v 符合垂直定位, \u000B
\f 符合換頁字元, \u000C
\n 符合新行字元, \u000A
\e 符合逸出字元, \u001B
\ nnn 符合 ASCII 字元,其中 nnn 是由代表八進位字元碼的兩個或三個數字所組成。 例如,\040 代表空格字元。 其若只有一個數字 (例如 \2),或其對應至擷取群組的編號,會將此建構解譯為反向參考 (請參閱反向參考建構。)
\x nn 符合 ASCII 字元,其中 nn 是兩位數的十六進位字元碼。
\c X 符合 ASCII 控制字元,其中 X 是控制字元的字母。 例如,\cC 是 CTRL + C。
\u nnnn 符合 UTF-16 字碼單位,其值為十六進位的 nnnn注意:.NET 不支援用來指定 Unicode 的 Perl 5 逸出字元。 Perl 5 字元逸出的形式是 \x{####…},其中 #### 是一系列的十六進位數字。 請改用 \unnnn
\ 當後面加上一個不被認為是逸出的字元時,符合該字元。 例如,\* 符合使用星號 (*),而且與 \x2A 相同。

範例

下列範例說明如何在規則運算式中使用逸出字元。 它會剖析字串,包含在 2009 年世界上最大城市的名稱以及人口。 每個城市名稱及其人口數目被 Tab (\t) 或分隔號 (| 或 \u007c) 分開。 個別的城市及其人口是被歸位字元和換行字元分隔開的。

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string delimited = @"\G(.+)[\t\u007c](.+)\r?\n";
      string input = "Mumbai, India|13,922,125\t\n" +
                            "Shanghai, China\t13,831,900\n" +
                            "Karachi, Pakistan|12,991,000\n" +
                            "Delhi, India\t12,259,230\n" +
                            "Istanbul, Türkiye|11,372,613\n";
      Console.WriteLine("Population of the World's Largest Cities, 2009");
      Console.WriteLine();
      Console.WriteLine("{0,-20} {1,10}", "City", "Population");
      Console.WriteLine();
      foreach (Match match in Regex.Matches(input, delimited))
         Console.WriteLine("{0,-20} {1,10}", match.Groups[1].Value,
                                            match.Groups[2].Value);
   }
}
// The example displays the following output:
//       Population of the World's Largest Cities, 2009
//
//       City                 Population
//
//       Mumbai, India        13,922,125
//       Shanghai, China      13,831,900
//       Karachi, Pakistan    12,991,000
//       Delhi, India         12,259,230
//       Istanbul, Türkiye     11,372,613
Imports System.Text.RegularExpressions

Module Example
    Public Sub Main()
        Dim delimited As String = "\G(.+)[\t\u007c](.+)\r?\n"
        Dim input As String = "Mumbai, India|13,922,125" + vbCrLf + _
                              "Shanghai, China" + vbTab + "13,831,900" + vbCrLf + _
                              "Karachi, Pakistan|12,991,000" + vbCrLf + _
                              "Delhi, India" + vbTab + "12,259,230" + vbCrLf + _
                              "Istanbul, Türkiye|11,372,613" + vbCrLf
        Console.WriteLine("Population of the World's Largest Cities, 2009")
        Console.WriteLine()
        Console.WriteLine("{0,-20} {1,10}", "City", "Population")
        Console.WriteLine()
        For Each match As Match In Regex.Matches(input, delimited)
            Console.WriteLine("{0,-20} {1,10}", match.Groups(1).Value, _
                                               match.Groups(2).Value)
        Next
    End Sub
End Module
' The example displays the following output:
'       Population of the World's Largest Cities, 2009
'       
'       City                 Population
'       
'       Mumbai, India        13,922,125
'       Shanghai, China      13,831,900
'       Karachi, Pakistan    12,991,000
'       Delhi, India         12,259,230
'       Istanbul, Türkiye     11,372,613

規則運算式 \G(.+)[\t\u007c](.+)\r?\n 的解譯方式如下表所示。

模式 描述
\G 從最後比對結束之處開始比對。
(.+) 一或多次比對任何字元。 這是第一個擷取群組。
[\t\u007c] 比對 Tab (\t) 或分隔號 (|)。
(.+) 一或多次比對任何字元。 這是第二個擷取群組。
\r?\n 比對後面接著新行的歸位字元其中的零或指定項目。

另請參閱