正则表达式知识点整理
定位符 | ||
\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); | ||
注:多行模式和单行模式可同时启用,这两个选项之间没有任何关系,除了它们的名字比较相似。 |