字符转义
更新: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 月 |
更正了正则表达式模式。 |
客户反馈 |