转义符 | 说明 |
一般字符 | 除 .$ ^ { [ ( | ) * + ? / 外,其他字符与自身匹配。 |
/a | 与响铃(警报)/u0007 匹配。 |
/b | 在正则表达式中,/b 表示单词边界(在 /w 和 /W 之间),不过,在 [] 字符类中,/b 表示退格符。在替换模式中,/b 始终表示退格符。 |
/t | 与 Tab 符 /u0009 匹配。 |
/r | 与回车符 /u000D 匹配。 |
/v | 与垂直 Tab 符 /u000B 匹配。 |
/f | 与换页符 /u000C 匹配。 |
/n | 与换行符 /u000A 匹配。 |
/e | 与 Esc 符 /u001B 匹配。 |
/040 | 将 ASCII 字符匹配为八进制数(最多三位);如果没有前导零的数字只有一位数或者与捕获组号相对应,则该数字为后向引用。例如,字符 |
/x20 | 使用十六进制表示形式(恰好两位)与 ASCII 字符匹配。 |
/cC | 与 ASCII 控制字符匹配;例如, |
/u0020 | 使用十六进制表示形式(恰好四位)与 Unicode 字符匹配。 |
/ | 在后面带有不识别为转义符的字符时,与该字符匹配。例如,/* 与 /x2A 相同。 |
字符类 | 说明 |
. | 匹配除 /n 以外的任何字符。如果已用 Singleline 选项做过修改,则句点字符可与任何字符匹配。 |
[ aeiou ] | 与指定字符集中包含的任何单个字符匹配。 |
[^ aeiou ] | 与不在指定字符集中的任何单个字符匹配。 |
[0-9a-fA-F] | 使用连字号 (–) 允许指定连续字符范围。 |
/p{ name } | 与 {name} 指定的命名字符类中的任何字符都匹配。支持的名称为 Unicode 组和块范围。例如,Ll、Nd、Z、IsGreek、IsBoxDrawing。可以使用 GetUnicodeCategory 方法找到某个字符所属的 Unicode 类别。 |
/P{ name } | 与在 {name} 中指定的组和块范围不包括的文本匹配。 |
/w | 与任何单词字符匹配。等效于 Unicode 字符类别 [/p{Ll}/p{Lu}/p{Lt}/p{Lo}/p{Nd}/p{Pc}/p{Lm}]。如果用 ECMAScript 选项指定了符合 ECMAScript 的行为,则 /w 等效于 [a-zA-Z_0-9]。 |
/W | 与任何非单词字符匹配。等效于 Unicode 字符类别 [^/p{Ll}/p{Lu}/p{Lt}/p{Lo}/p{Nd}/p{Pc}/p{Lm}]。如果用 ECMAScript 选项指定了符合 ECMAScript 的行为,则 /W 等效于 [^a-zA-Z_0-9]。 |
/s | 与任何空白字符匹配。等效于 Unicode 字符类别 [/f/n/r/t/v/x85/p{Z}]。如果用 ECMAScript 选项指定了符合 ECMAScript 的行为,则 /s 等效于 [ /f/n/r/t/v]。 |
/S | 与任何非空白字符匹配。等效于 Unicode 字符类别 [^/f/n/r/t/v/x85/p{Z}]。如果用 ECMAScript 选项指定了符合 ECMAScript 的行为,则 /S 等效于 [^ /f/n/r/t/v]。 |
/d | 与任何十进制数字匹配。对于 Unicode 类别的 ECMAScript 行为,等效于 /p{Nd},对于非 Unicode 类别的 ECMAScript 行为,等效于 [0-9]。 |
/D | 与任何非数字匹配。对于 Unicode 类别的 ECMAScript 行为,等效于 /P{Nd},对于非 Unicode 类别的 ECMAScript 行为,等效于 [^0-9]。 |
断言 | 说明 |
^ | 指定匹配必须出现在字符串的开头或行的开头。。 |
$ | 指定匹配必须出现在以下位置:字符串结尾、字符串结尾处的 /n 之前或行的结尾。 |
/A | 指定匹配必须出现在字符串的开头(忽略 Multiline 选项)。 |
/Z | 指定匹配必须出现在字符串的结尾或字符串结尾处的 /n 之前(忽略 Multiline 选项)。 |
/z | 指定匹配必须出现在字符串的结尾(忽略 Multiline 选项)。 |
/G | 指定匹配必须出现在上一个匹配结束的地方。与 Match.NextMatch() 一起使用时,此断言确保所有匹配都是连续的。 |
/b | 指定匹配必须出现在 /w(字母数字)和 /W(非字母数字)字符之间的边界上。匹配必须出现在单词边界上,即出现在由任何非字母数字字符分隔的单词中第一个或最后一个字符上。 |
/B | 指定匹配不得出现在 /b 边界上。 |
限定符 | 说明 |
* | 指定零个或更多个匹配;例如 /w* 或 (abc)*。等效于 {0,}。 |
+ | 指定一个或多个匹配;例如 /w+ 或 (abc)+。等效于 {1,}。 |
? | 指定零个或一个匹配;例如 /w? 或 (abc)?。等效于 {0,1}。 |
{ n } | 指定恰好 n 个匹配;例如 (pizza){2}。 |
{ n ,} | 指定至少 n 个匹配;例如 (abc){2,}。 |
{ n , m } | 指定至少 n 个但不多于 m 个匹配。 |
*? | 指定尽可能少地使用重复的第一个匹配(等效于 lazy *)。 |
+? | 指定尽可能少地使用重复但至少使用一次(等效于 lazy +)。 |
?? | 指定使用零次重复(如有可能)或一次重复 (lazy ?)。 |
{ n }? | 等效于 {n} (lazy {n})。 |
{ n ,}? | 指定尽可能少地使用重复但至少使用 n 次 (lazy {n,})。 |
{ n , m }? | 指定介于 n 次和 m 次之间、尽可能少地使用重复 (lazy {n,m})。 |
示例:
反向引用,指把匹配出来的组引用到表达式本身其它地方,比如,在匹配HTML的标记时,我们匹配出一个<a>,我们要把匹配出来的a引用出来,用来找到</a>,这个时候就要用到反向引用。
语法
a、反向引用编号的组,语法为/number
b、反向引用命名的组,语法为/k<name>
举例
a、匹配成对的HTML标签
@"<(?<tag>[^/s>]+)[^>]*>.*<//k<tag>>"
b、匹配两个两个重叠出现的字符
public static void Main()
{
string s = "aabbc11asd";
Regex reg = new Regex(@"(/w)/1");
MatchCollection matches = reg.Matches(s);
foreach(Match m in matches)
Console.WriteLine(m.Value);
Console.ReadLine();
}
返回结果为aa bb 11