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

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

  • 它後面所接的字元是特殊字元,如下節中的資料表所示。 比方說,\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),或其對應至擷取群組的編號,會將此建構解譯為反向參考 (請參閱反向參考建構。)
\xnn 符合 ASCII 字元,其中 nn 是兩位數的十六進位字元碼。
\cX 符合 ASCII 控制字元,其中 X 是控制字元的字母。 例如,\cC 是 CTRL + C。
\unnnn 符合 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 比對後面接著新行的歸位字元其中的零或指定項目。

另請參閱