正则表达式是正则表达式引擎尝试匹配输入文本的一种模式。 模式由一个或多个字符文本、运算符或构造组成。 有关简要介绍,请参阅
.NET 正则表达式
。
此快速参考中的每一节都列出了可用于定义正则表达式的字符、运算符和构造的一种特定类别。
此外,我们还以两种格式提供此信息,供你下载和打印以便参考:
以 Word (.docx) 格式下载
以 PDF (.pdf) 格式下载
正则表达式中的反斜杠字符 (\) 指示其后跟的字符是特殊字符(如下表所示),或应按原义解释该字符。 有关详细信息,请参阅
字符转义
。
在后面带有不识别为本主题的此表和其他表中的转义符的字符时,与该字符匹配。 例如,
\*
与
\x2A
相同,而
\.
与
\x2E
相同。 这允许正则表达式引擎区分语言元素(如 * 或 ?)和字符(用
\*
或
\?
表示)。
\d+[\+-x\*]\d+
"(2+2) * 3*9"
中的
"2+2"
和
"3*9"
字符类与一组字符中的任何一个字符匹配。 字符类包括下表中列出的语言元素。 有关更多信息,请参见
字符类
。
[^
character_group
]
求反:与不在
character_group 中的任何单个字符
匹配。 默认情况下,
character_group
中的字符区分大小写。
[^aei]
"reign"
中的
"r"
、
"g"
和
"n"
[
first
-
last
]
字符范围:与
从第一个至最后一个的范围内的任何单个字符
匹配。
[A-Z]
"AB123"
中的
"A"
和
"B"
通配符:与
除
\n
之外的任何单个字符
匹配。
若要匹配文本句点字符(. 或
\u002E
),你必须在该字符前面加上转义符 (
\.
)。
"nave"
中的
"ave"
"water"
中的
"ate"
\p{
name
}
与
name 指定的 Unicode 通用类别或命名块中的任何单个字符
匹配。
\p{Lu}
\p{IsCyrillic}
"City Lights"
中的
"C"
和
"L"
"ДЖem"
中的
"Д"
和
"Ж"
\P{
name
}
与
不在 name 指定的 Unicode 通用类别或命名块中的任何单个字符
匹配。
\P{Lu}
\P{IsCyrillic}
"City"
中的
"i"
、
"t"
和
"y"
"ДЖem"
中的
"e"
和
"m"
与任何
单词字符
匹配。
"ID A1.3"
中的
"I"
、
"D"
、
"A"
、
"1"
和
"3"
与任何
非单词字符
匹配。
"ID A1.3"
中的
" "
和
"."
与任何
空白字符
匹配。
"ID A1.3"
中的
"D "
与任何
非空白字符
匹配。
"int __ctr"
中的
" _"
与任何
十进制数字
匹配。
"4 = IV"
中的
"4"
与任何
不是十进制数的字符
匹配。
"4 = IV"
中的
" "
、
"="
、
" "
、
"I"
和
"V"
定位点或原子零宽度断言会使匹配成功或失败,具体取决于字符串中的当前位置,但它们不会使引擎在字符串中前进或使用字符。 下表中列出的元字符是定位点。 有关详细信息,请参阅
定位点
。
默认情况下,匹配必须出现在字符串的末尾,或在字符串末尾的
\n
之前;在多行模式中,必须出现在该行的末尾之前,或在该行末尾的
\n
之前。
-\d{3}$
"-901-333"
中的
"-333"
匹配必须出现在字符串的开头。
\A\d{3}
"901-333-"
中的
"901"
匹配必须出现在字符串的末尾或出现在字符串末尾的
\n
之前。
-\d{3}\Z
"-901-333"
中的
"-333"
匹配必须出现在字符串的末尾。
-\d{3}\z
"-901-333"
中的
"-333"
匹配必须在上一个匹配结束的位置进行;如果以前没有匹配项,则从开始进行匹配的字符串中的位置开始。
\G\(\d\)
"(1)(3)(5)[7](9)"
中的
"(1)"
、
"(3)"
和
"(5)"
匹配必须出现在
\w
(字母数字)和
\W
(非字母数字)字符之间的边界上。
\b\w+\s\w+\b
"them theme them them"
中的
"them theme"
和
"them them"
匹配不得出现在
\b
边界上。
\Bend\w*\b
"end sends endure lender"
中的
"ends"
和
"ender"
分组构造描述了正则表达式的子表达式,通常用于捕获输入字符串的子字符串。 分组构造包括下表中列出的语言元素。 有关详细信息,请参阅
分组构造
。
(?<
name
>
subexpression
)
或
(?'
name
'
subexpression
)
将匹配的子表达式捕获到一个命名组中。
(?<double>\w)\k<double>
"deep"
中的
"ee"
(?<
name1
-
name2
>
subexpression
)
或
(?'
name1
-
name2
'
subexpression
)
定义平衡组定义。 有关详细信息,请参阅
分组构造
中的"平衡组定义"部分。
(((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$
"3+2^((1-3)*(3-1))"
中的
"((1-3)*(3-1))"
(?:
subexpression
)
定义非捕获组。
Write(?:Line)?
"Console.WriteLine()"
中的
"WriteLine"
"Console.Write(value)"
中的
"Write"
(?imnsx-imnsx:
subexpression
)
应用或禁用
子表达式
中指定的选项。 有关详细信息,请参阅
正则表达式选项
。
A\d{2}(?i:\w+)\b
"A12xl A12XL a12xl"
中的
"A12xl"
和
"A12XL"
(?=
subexpression
)
零宽度正预测先行断言。
\b\w+\b(?=.+and.+)
%>
in
"cats, dogs and some mice."
(?!
subexpression
)
零宽度负预测先行断言。
\b\w+\b(?!.+and.+)
.- .
in
"cats, dogs and some mice."
(?<=
subexpression
)
零宽度正回顾后发断言。
\b\w+\b(?<=.+and.+)
\b\w+\b(?<=.+and.*)
%>
in
"cats, dogs and some mice."
.- .
in
"cats, dogs and some mice."
(?<!
subexpression
)
零宽度负回顾后发断言。
\b\w+\b(?<!.+and.+)
\b\w+\b(?<!.+and.*)
.- .
in
"cats, dogs and some mice."
%>
in
"cats, dogs and some mice."
(?>
subexpression
)
'(?>a|ab)c
"ac"
中的
"ac"
"abc"
中无匹配
Lookaround 概览
当正则表达式引擎命中 Lookaround 表达式时,其需要一个子字符串从当前位置到达原始字符串的开始(后行)或结束(先行),然后使用 Lookaround 模式在该子字符串上运行
Regex.IsMatch
。 然后,根据此子表达式的结果是正断言还是负断言,可判断其结果是否成功。
Lookaround
(?(
expression
)
yes
|
no
)
或
(?(
表达式
)
是
)
如果由
expression
指定的正则表达式模式匹配,则匹配
yes
;否则,匹配可的
no
部分。
expression
解释为零宽度的断言。
为了避免已命名或已编号的捕获组出现歧义,可选择使用显式断言,如下所示:
(?( (?=
expression
) )
yes
|
no
)
(?(A)A\d{2}\b|\b\d{3}\b)
"A10 C103 910"
中的
"A10"
和
"910"
(?(
name
)
yes
|
no
)
或
(?(
名称
)
是
)
如果
name
(已命名或已编号的捕获组)具有匹项,则匹配
yes
;否则,匹配可的
no
。
(?<quoted>")?(?(quoted).+?"|\S+\s)
"Dogs.jpg \"Yiska playing.jpg\""
中的
"Dogs.jpg "
和
"\"Yiska playing.jpg\""
替换是替换模式中支持的正则表达式语言元素。 有关更多信息,请参见
替代
。 下表中列出的元字符是原子零宽度断言。
输入字符串
结果字符串
正则表达式选项
可以指定控制正则表达式引擎如何解释正则表达式模式的选项。 其中的许多选项可以指定为内联(在正则表达式模式中)或指定为一个或多个
RegexOptions
常量。 本快速参考仅列出内联选项。 有关内联和
RegexOptions
选项的详细信息,请参阅文章
正则表达式选项
。
可通过两种方式指定内联选项:
通过使用
其他构造
(?imnsx-imnsx)
,可用选项或选项组前的减号 (-) 关闭这些选项。 例如,
(?i-mn)
启用不区分大小写的匹配 (
i
),关闭多行模式 (
m
) 并关闭未命名的组捕获 (
n
)。 该选项自定义选项的点开始应用于此正则表达式,且持续有效直到模式结束或者到另一构造反转此选项的点。
通过使用
分组构造
(?imnsx-imnsx:
子表达式
)
(只定义指定组的选项)。
.NET 正则表达式引擎支持以下内联选项:
使用不区分大小写的匹配。
\b(?i)a(?-i)a\w+\b
"aardvark AAAuto aaaAuto Adam breakfast"
中的
"aardvark"
和
"aaaAuto"
使用多行模式。
^
和
$
匹配行的开头和结尾,但不匹配字符串的开头和结尾。
有关示例,请参阅
正则表达式选项
中的"多行模式"部分。
不捕获未命名的组。
有关示例,请参阅
正则表达式选项
中的"仅显式捕获"部分。
使用单行模式。
有关示例,请参阅
正则表达式选项
中的"单行模式"部分。
忽略正则表达式模式中的非转义空白。
\b(?x) \d+ \s \w+
"1 aardvark 2 cats IV centurions"
中的
"1 aardvark"
和
"2 cats"
其他构造可修改某个正则表达式模式或提供有关该模式的信息。 下表列出了 .NET 支持的其他构造。 有关详细信息,请参阅
其他构造
。
(?imnsx-imnsx)
在模式中间对诸如不区分大小写这样的选项进行设置或禁用。有关详细信息,请参阅
正则表达式选项
。
\bA(?i)b\w+\b
匹配
"ABA Able Act"
中的
"ABA"
和
"Able"
(?#
comment
)
内联注释。 该注释在第一个右括号处终止。
\bA(?#Matches words starting with A)\w+\b
#
[至行尾]
X 模式注释。 该注释以非转义的
#
开头,并继续到行的结尾。
(?x)\bA\w+\b#Matches words starting with A
System.Text.RegularExpressions
System.Text.RegularExpressions.Regex
正则表达式
正则表达式类
正则表达式 - 快速参考(以 Word 格式下载)
正则表达式 - 快速参考(以 PDF 格式下载)