逸出字元
更新:2010 年 5 月
反斜線 (\) 是指示下列一項的規則運算式:
其後接的字元是特殊字元,如下一節中的表格所示。 例如,\b 是錨點,會指出相符的規則運算式應該在字緣開始,\t 表示定位點,\x020 則表示空格。
一個字元,否則會被解譯為應該逐字解譯的未逸出語言建構。 例如,大括號 ({) 開始數量詞的定義,但是後接大括號的反斜線 (\{) 則指示規則運算式引擎應該符合大括號。 同樣的,單一反斜線會標記逸出之語言建構的開頭,但兩個反斜線 (\\) 則指示規則運算式引擎應該符合反斜線。
![]() |
---|
逸出字元可在規則運算式模式中辨認,但無法在取代模式中辨認。 |
.NET Framework 中的逸出字元
下表列出 .NET Framework 中規則運算式所支援的逸出字元。
字元或序列 |
描述 |
---|---|
除了下列字元以外的所有字元: . $ ^ { [ ( | ) * + ? \ |
這些字元在規則運算式中沒有特殊意義,而是符合本身。 |
\a |
符合鈴聲 (警示) 字元 \u0007。 |
\b |
在 [character_group] 字元類別中,比對退格鍵 \u0008。 (請參閱字元類別)。在字元類別以外,\b 是符合字緣的錨點。 (請參閱規則運算式中的錨點)。 |
\t |
符合定位字元,\u0009。 |
\r |
符合歸位字元,\u000D。 請注意,\r 不等於新行字元 \n。 |
\v |
符合垂直定位字元,\u000B。 |
\f |
符合 Form Feed,\u000C。 |
\n |
符合新行字元,\u000A。 |
\e |
符合逸出字元,\u001B。 |
\nnn |
符合 ASCII 字元,其中 nnn 是由表示八進位字碼指標的三位數字組成。 例如,\040 表示空白字元。 不過,如果有只有一個數字 (例如,\2),或對應至擷取群組的編號,則會將這個建構解譯為反向參考。 (請參閱反向參考建構)。 |
\xnn |
符合 ASCII 字元,其中 nn 是二位數的十六進位字碼指標。 |
\cX |
符合 ASCII 控制字元,其中 X 是控制字元的字母。 例如,\cC 是 CTRL-C。 |
\unnnn |
符合 Unicode 字元,其中 nnnn 是四位數的十六進位字碼指標。 ![]()
.NET Framework 不支援用來指定 Unicode 的 Perl 5 逸出字元。Perl 5 逸出字元的格式是 \x{####…},其中 ####… 是一連串的十六進位數字。請改用 \unnnn。
|
\ |
如果無法識別後面所接的字元為逸出字元,則符合該字元。 例如,\* 符合星號 (*),而且與 \x2A 相同。 |
範例
下列範例會說明規則運算式中逸出字元的用法。 它會剖析字串,其中包含 2009年全世界最大城市的名稱及其人口。 每個城市名稱及其人口,都會以定位字元 (\t) 或垂直列 (| 或 \u007c) 分隔。 個別城市及其人口都以歸位字元和換行字元彼此分隔。
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 + _
"Dehli, India" + vbTab + "12,259,230" + vbCrLf + _
"Istanbul, Turkey|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
' Dehli, India 12,259,230
' Istanbul, Turkey 11,372,613
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" +
"Dehli, India\t12,259,230\n" +
"Istanbul, Turkey|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 displyas 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
// Dehli, India 12,259,230
// Istanbul, Turkey 11,372,613
規則運算式 \G(.+)[\t|\u007c](.+)\r?\n 的解譯方式如下表所示。
模式 |
描述 |
---|---|
\G |
從上一次比對結束的地方開始比對。 |
(.+) |
符合任何字元一次或多次。 這是第一個擷取群組。 |
[\t\u007c] |
符合定位字元 (\t) 或垂直列 (|)。 |
(.+) |
符合任何字元一次或多次。 這是第二個擷取群組。 |
\r? \n |
符合零個或一個後接新行的歸位字元。 |
請參閱
概念
變更記錄
日期 |
記錄 |
原因 |
---|---|---|
2010 年 5 月 |
已更正規則運算式模式。 |
客戶回函。 |