字符转义

更新:2010 年 5 月

正则表达式中的反斜杠 (\) 指示以下情况之一:

  • 其后的字符是一个特殊的字符,如下一节中的表所示。 例如,\b 是一个指示正则表达式匹配应在单词边界上开始的定位点,\t 表示一个选项卡,而 \x020 表示空格。

  • 会以其他方式解释为非转义语言构造的字符应按其原义解释。 例如,大括号 ({) 开始限定符的定义,但反斜杠后接大括号 (\{) 表示正则表达式引擎应匹配大括号。 同样,一个反斜杠标志转义语言构造的开头,但两个反斜杠 (\\) 则指示正则表达式引擎应匹配反斜杠。

注意注意

字符转义在正则表达式中会被识别,但在替换模式中不会被识别。

.NET Framework 中的字符转义

下表列出 .NET Framework 的正则表达式支持的字符转义。

字符或序列

说明

以下字符之外的所有字符:

. $ ^ { [ ( | ) * + ? \

这些字符在正则表达式中没有特殊含义;它们与自身匹配。

\a

与报警 (bell) 符 \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

与 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

与零个或一个后接一个新行的回车符匹配。

请参见

概念

正则表达式语言元素

修订记录

Date

修订记录

原因

2010 年 5 月

更正了正则表达式模式。

客户反馈