定位符 | ||
\b | 匹配单词的开始或结束 | |
\B | 匹配不是单词开头或结束的位置 | |
^ | 匹配字符串的开始 | |
$ | 匹配字符串的结束 | |
内容匹配 | ||
\w | 匹配字母或数字或下划线或汉字 | |
\W | 匹配非字母或数字或下划线或汉字的字符 | |
\d | 匹配数字 | |
\D | 匹配非数字 | |
\s | 匹配任意的空白符 | |
\S | 匹配任何非空白字符 | |
. | 匹配除换行符以外的任意字符 | |
\f | 匹配一个换页符 | |
\n | 匹配一个换行符 | |
\r | 匹配一个回车符 | |
\t | 匹配一个制表符 | |
\v | 匹配一个垂直制表符 | |
数量匹配 | ||
* | 重复零次或更多次 | |
? | 重复零次或一次 | |
+ | 重复一次或更多次 | |
{N} | 重复N次 | |
{N,} | 重复N次,或更多 | |
{N,M} | 重复N到M次 | |
可选项匹配 | ||
[ABC] | 匹配[]中任何一个字符 | |
[0-9A-Z] | 匹配0-9或A-Z中任何一个字符 | |
[^0-9] | 匹配0-9以外任何一个字符 | |
分支条件 | ||
| | 分支条件(或逻辑) | 使用分枝条件时,要注意各个条件的顺序。逻辑较为严格匹配表达式应该放在前面。 匹配时,将会从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了。 |
分组 | ||
() | 可以用小括号来指定子表达式(分组) | 对于子表达式可以去统一制定循环次数 |
向后引用 | ||
(exp) | 匹配exp,并捕获文本到自动命名的组里 | 引用方式:\index index 为从左到右分配的组号 |
(?<name>exp) | 匹配exp,并捕获文本到名称为name的组里,也可以写成(?‘name‘exp) | \K<nmae> |
(?:exp) | 匹配exp,不捕获匹配的文本,也不给此分组分配组号 | |
零宽断言 | ||
(?=exp) | 匹配exp前面的位置[描述 exp与前面部分的关系] | 例如:\b\w+(?=ing\b) 先找到ing\b匹配的位置,然后再以ing\b为结尾判断\b\w+匹配的内容 |
(?<=exp) | 匹配exp后面的位置[描述 exp与后面部分的关系] | 例如:(?<=\bre)\w+\b 先找到\bre匹配的位置,然后再以\bre为开头判断\w+\b匹配的内容 |
负向零宽断言 | ||
(?!exp) | 匹配后面跟的不是exp的位置[描述 exp与前面部分的关系] | 例如:\d{3}(?!\d) 先找到\d{3}匹配的字符串,然后判断它后面的内容不匹配\d |
(?<!exp) | 匹配前面不是exp的位置[描述 exp与后面部分的关系] | 例如:(?<![a-z])\d{7} 先找到\d{7}匹配的字符串,然后判断它前面的内容不匹配[a-z] |
注释 | ||
(?#注释文本) | 括号内的内容为注释 | |
#注释文本 | 当前这一行,#之后的内容全部为注释 | |
贪婪与懒惰 | ||
贪婪匹配:正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。 | ||
懒惰匹配:就是匹配尽可能少的字符。只要在它后面加上一个问号?就可以转换 | ||
匹配优先级:正则表达式有另一条规则,比懒惰/贪婪规则的优先级更高:最先开始的匹配拥有最高的优先权 | ||
*? | 重复任意次,但尽可能少重复 | |
+? | 重复1次或更多次,但尽可能少重复 | |
?? | 重复0次或1次,但尽可能少重复 | |
{n,m}? | 重复n到m次,但尽可能少重复 | |
{n,}? | 重复n次以上,但尽可能少重复 | |
处理选项(.net支持) | ||
IgnoreCase(忽略大小写) | 匹配时不区分大小写。 | |
Multiline(多行模式) | 更改^和$的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配\n之前的位置以及字符串结束前的位置.) | |
Singleline(单行模式) | 更改.的含义,使它与每一个字符匹配(包括换行符\n)。 | |
IgnorePatternWhitespace(忽略空白) | 忽略表达式中的非转义空白并启用由#标记的注释。 | |
ExplicitCapture(显式捕获) | 仅捕获已被显式命名的组。 | |
如:Regex regex = new Regex(@"\ba\w{6}\b", RegexOptions.IgnoreCase); |
||
注:多行模式和单行模式可同时启用,这两个选项之间没有任何关系,除了它们的名字比较相似。 |
时间: 2024-10-13 06:29:19