C# 中正则表达式用法:
Regex.IsMatch(filePathName, fileFilter)
限定符:
1
2
3
4
5
6
|
* 匹配上一个元素零次或多次
+ 匹配上一个元素一次或多次
? 匹配上一个元素零次或一次
{n} 匹配上一个元素恰好n次
{n,} 匹配上一个元素至少n次
{n,m} 匹配上一个元素至少n次,但不多于m次
|
字符类:
1
2
3
4
5
6
7
8
9
|
[character] 匹配任何单个字符,默认区分大小写,比如 [mn] 可以匹配 "mat" 中的 m
[^character] 非,与不在character中的任何单个字符匹配,比如 [^aei] 可以匹配 "avail" 中的 "v"和"l"
[first-last] 字符范围,与从first到last的范围中的任何单个字符匹配
\w 与任何单词字符匹配
\W 与任何非单词字符匹配
\s 与任何空白字符匹配
\S 与任何非空白字符匹配
\d 与任何十进制数字匹配
\D 匹配不是十进制数的任意字符
|
定位点:
1
2
3
4
5
6
|
^ 匹配必须从字符串或一行的开头开始
$ 匹配必须出现在字符串的末尾或出现在行或字符串末尾的\n之前
\A 匹配必须出现在字符串的开头
\Z 匹配必须出现在字符串的末尾或出现在字符串末尾的 \n 之前
\z 匹配必须出现在字符串的末尾
\b 匹配必须出现在\w和\W字符之间的边界上
|
分组构造:
描述正则表达式的子表达式,通常用于捕获输入字符串的子字符串。
当需要捕获的内容前后必须是特定的内容,但又不捕获这些特定内容,零宽断言 就起到作用了。
正如其名,是一种零宽度的匹配,匹配到的内容不会保存到匹配结果中去,最终匹配结果只是一个位置而已。
作用是,给指定位置添加一个限定条件,用来规定此位置之前或者之后的字符必须满足限定条件才能使正则中的子表达式匹配成功。
1
2
3
4
5
6
7
|
(exp) 捕获匹配的子表达式并将其分配到一个从零开始的序号中
(?<name>exp)将匹配的子表达式捕获到一个命名组中
(?:exp) 定义非捕获组
(?=exp) 零宽度正预测先行断言,断言自身出现的位置的后面能匹配表达式exp,比如 "hello sing dancing" 匹配 [a-z]+(?=ing) 得到 s,danc
(?<=exp) 零宽度正回顾后发断言,断言自身出现的位置的前面能匹配表达式exp,比如 "hello world java" 匹配 (?<=\bwo)\w+\b 得到 rld
(?!exp) 零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp,比如匹配一个单词,它有个字母a但a后面不能是b,可以用 \b[a-z]*a(?!b)[a-z]*\b
(?<!exp) 零宽度负回顾后发断言,断言此位置的前面不能匹配表达式exp
|