正则表达式知识点整理

定位符    
 匹配单词的开始或结束
B 匹配不是单词开头或结
束的位置
 
^ 匹配字符串的开始  
$ 匹配字符串的结束  
内容匹配    
w 匹配字母或数字或下划
线或汉字
 
W 匹配非字母或数字或下
划线或汉字的字符
 
d 匹配数字  
D 匹配非数字  
s 匹配任意的空白符  
S 匹配任何非空白字符  
. 匹配除换行符以外的
任意字符
 
f 匹配一个换页符  
匹配一个换行符  
匹配一个回车符  
匹配一个制表符  
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与前面部
分的关系]
例如:w+(?=ing)  先找到ing匹配的位置,
然后再以ing为结尾判断w+匹配的内容
(?<=exp) 匹配exp后面的位置
[描述 exp与后面部
分的关系]
例如:(?<=re)w+  先找到re匹配的位置,
然后再以re为开头判断w+匹配的内容
负向零宽断言    
(?!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(多行模式) 更改^和$的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在
整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配 之
前的位置以及字符串结束前的位置.)
Singleline(单行模式) 更改.的含义,使它与每一个字符匹配(包括换行符 )。
IgnorePatternWhitespace(忽略空白) 忽略表达式中的非转义空白启用由#标记的注释。
ExplicitCapture(显式捕获) 仅捕获已被显式命名的组。  
如:Regex regex = new Regex(@"aw{6}", RegexOptions.IgnoreCase);
注:多行模式和单行模式可同时启用,这两个选项之间没有任何关系,除了它们的名字比较相似。
原文地址:https://www.cnblogs.com/SunDigital/p/4786520.html