从msdn上把个人认为经常用的正则表达式的资料总结了下.
字符转义
转义符 | 说明 | ||
一般字符 | 除 .$ ^ { [ ( | ) * + ? / 外,其他字符与自身匹配。 | ||
/a | 与响铃(警报)/u0007 匹配。 | ||
/b | 如果在 [] 字符类中,则与退格符 /u0008 匹配;如果不是这种情况,请参见本表后面的“注意”部分。 | ||
/t | 与 Tab 符 /u0009 匹配。 | ||
/r | 与回车符 /u000D 匹配。 | ||
/v | 与垂直 Tab 符 /u000B 匹配。 | ||
/f | 与换页符 /u000C 匹配。 | ||
/n | 与换行符 /u000A 匹配。 | ||
/e | 与 Esc 符 /u001B 匹配。 | ||
/040 | 将 ASCII 字符匹配为八进制数(最多三位);如果没有前导零的数字只有一位数或者与捕获组号相对应,则该数字为后向引用。(有关更多信息,请参见反向引用。)例如,字符 /040 表示空格。 | ||
/x20 | 使用十六进制表示形式(恰好两位)与 ASCII 字符匹配。 | ||
/cC | 与 ASCII 控制字符匹配;例如,/cC 为 Ctrl-C。 | ||
/u0020 | 使用十六进制表示形式(恰好四位)与 Unicode 字符匹配。
| ||
/ | 在后面带有不识别为转义符的字符时,与该字符匹配。例如,/* 与 /x2A 相同。 |
注意 |
转义字符 /b 是一个特例。在正则表达式中,/b 表示单词边界(在 /w 和 /W 之间),不过,在 [] 字符类中,/b 表示退格符。在替换模式中,/b 始终表示退格符。 |
替换
字符 | 说明 |
$ 数字 | 替换按组号 number(十进制)匹配的最后一个子字符串。 |
${ name } | 替换由 (?<name> ) 组匹配的最后一个子字符串。 |
$$ | 替换单个“$”字符。 |
$& | 替换完全匹配本身的一个副本。 |
$` | 替换匹配前的输入字符串的所有文本。 |
$' | 替换匹配后的输入字符串的所有文本。 |
$+ | 替换最后捕获的组。 |
$_ | 替换整个输入字符串。 |
字符类
字符类 | 说明 |
. | 匹配除 /n 以外的任何字符。如果已用 Singleline 选项做过修改,则句点字符可与任何字符匹配。有关更多信息,请参见正则表达式选项。 |
[ aeiou ] | 与指定字符集中包含的任何单个字符匹配。 |
[^ aeiou ] | 与不在指定字符集中的任何单个字符匹配。 |
[0-9a-fA-F] | 使用连字号 (–) 允许指定连续字符范围。 |
/p{ name } | 与 {name} 指定的命名字符类中的任何字符都匹配。支持的名称为 Unicode 组和块范围。例如,Ll、Nd、Z、IsGreek、IsBoxDrawing。 |
/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]。 |
原子零宽度断言(翻译的很怪异)
断言 | 说明 |
^ | 指定匹配必须出现在字符串的开头或行的开头。有关更多信息,请参见正则表达式选项中的 Multiline 选项。 |
$ | 指定匹配必须出现在以下位置:字符串结尾、字符串结尾处的 /n 之前或行的结尾。有关更多信息,请参见正则表达式选项中的 Multiline 选项。 |
/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})。 |
分组构造
分组构造 | 说明 |
( ) | 捕获匹配的子字符串(或非捕获组;有关更多信息,请参见正则表达式选项中的 ExplicitCapture 选项)。使用 () 的捕获根据左括号的顺序从 1 开始自动编号。捕获元素编号为零的第一个捕获是由整个正则表达式模式匹配的文本。 |
(?<name> ) | 将匹配的子字符串捕获到一个组名称或编号名称中。用于 name 的字符串不能包含任何标点符号,并且不能以数字开头。可以使用单引号替代尖括号,例如 (?'name')。 |
(?<name1-name2> ) | 平衡组定义。删除先前定义的 name2 组的定义并在 name1 组中存储先前定义的 name2 组和当前组之间的间隔。如果未定义 name2 组,则匹配将回溯。由于删除 name2 的最后一个定义会显示 name2 的先前定义,因此该构造允许将 name2 组的捕获堆栈用作计数器以跟踪嵌套构造(如括号)。在此构造中,name1 是可选的。可以使用单引号替代尖括号,例如 (?'name1-name2')。 |
(?: ) | 非捕获组。 |
(? imnsx-imnsx : ) | 应用或禁用子表达式中指定的选项。例如,(?i-s: ) 将打开不区分大小写并禁用单行模式。有关更多信息,请参见正则表达式选项。 |
(?= ) | 零宽度正预测先行断言。仅当子表达式在此位置的右侧匹配时才继续匹配。例如,/w+(?=/d) 与后跟数字的单词匹配,而不与该数字匹配。此构造不会回溯。 |
(?! ) | 零宽度负预测先行断言。仅当子表达式不在此位置的右侧匹配时才继续匹配。例如,/b(?!un)/w+/b 与不以 un 开头的单词匹配。 |
(?<= ) | 零宽度正回顾后发断言。仅当子表达式在此位置的左侧匹配时才继续匹配。例如,(?<=19)99 与跟在 19 后面的 99 的实例匹配。此构造不会回溯。 |
(?<! ) | 零宽度负回顾后发断言。仅当子表达式不在此位置的左侧匹配时才继续匹配。 |
(?> ) | 非回溯子表达式(也称为“贪婪”子表达式)。该子表达式仅完全匹配一次,然后就不会逐段参与回溯了。(也就是说,该子表达式仅与可由该子表达式单独匹配的字符串匹配。) |
后向引用构造(翻译很怪异)
后向引用构造 | 定义 |
/ 数字 | 后向引用。例如,(/w)/1 查找双写的单词字符。 |
/k<name> | 命名后向引用。例如,(?<char>/w)/k<char> 查找双写的单词字符。表达式 (?<43>/w)/43 执行同样的操作。可以使用单引号替代尖括号,例如 /k'char'。 |
替换构造
替换构造 | 定义 |
| | 与以 |(竖线)字符分隔的术语中的任何一项匹配;例如, cat|dog|tiger。使用最左侧的成功匹配。 |
(?( 表达式 )yes|no) | 如果表达式在此位置匹配,则与“yes”部分匹配;否则,与“no”部分匹配。“no”部分可省略。表达式可以是任何有效的子表达式,但它将变为零宽度断言,因此该语法等效于 (?(?=expression)yes|no)。请注意,如果表达式是命名组的名称或捕获组编号,则替换构造将解释为捕获测试(在本表的下一行对此进行了描述)。若要避免在这些情况下产生混淆,则可以显式拼出内部 (?=expression)。 |
(?( name )yes|no) | 如果命名捕获字符串有匹配,则与“yes”部分匹配;否则,与“no”部分匹配。“no”部分可省略。如果给定的名称不与此表达式中使用的捕获组的名称或编号对应,则替换构造将解释为表达式测试(在本表的上一行进行了描述)。 |
其他构造
构造 | 定义 |
(? imnsx - imnsx ) | 对诸如不区分大小写这样的选项进行设置或禁用以使其在模式中间打开或关闭。有关特定选项的信息,请参见正则表达式选项。在封闭组结束之前,选项更改将一直有效。请参见有关分组构造(?imnsx-imnsx: ) 的信息,它是一个更为巧妙的形式。 |
(?# ) | 插入到正则表达式内部的内联注释。该注释在第一个右括号字符处终止。 |
# [至行尾] | X 模式注释。该注释以非转义的 # 开头,并继续到行的结尾。(请注意,必须激活 x 选项或 RegexOptions.IgnorePatternWhitespace 枚举选项才能识别此类注释。) |
写个简单例子:
//分name和value组name存储:符号前的所有非符号的字符,value组存储:后的所有非符号的字符
Regex r = new Regex("^(?<name>//w+):(?<value>//w+)");
Match m = r.Match("Section1:119900");
结果:
m.Groups["name"].Value = "Section1"
m.Groups["value"].Value = "119900"