正则表达式是专门处理字符串操作的,其本身有固定的写法。

正则表达式的符号主要分为元字符和表示重复的字符,分别如下表所示。

正则表达式中的元字符

编号

字符

描述

1

.


匹配除换行符以外的所有字符

2

\w

匹配字母、数字、下画线

3

\s

匹配空白符(空格)

4

\d

匹配数字

5

\b

匹配表达式的开始或结束

6

^

匹配表达式的开始

7

$

匹配表达式的结束


正则表达式中表示重复的字符

编 号

字 符

描 述

1

*

0次或多次字符

2

?

0次或1次字符

3

+

1次或多次字符

4

{n}

n次字符

5

{n,M} 

n到M次字符

6

{n, }

n次以上字符


此外,在正则表达式中使用​​|​​分隔符表示多个正则表达式之间的或者关系,也就是在匹配某一个字符串时满足其中一个正则表达式即可。

例如使用正则表达式来验证身份证信息,第一代身份证是由 15 个数字构成的,第二代身份证是由 18 个数字构成的,正则表达式可以写成 ​​\d{15}|\d{18}​​。

在 C# 语言中使用正则表达式时要用到 Regex 类,该类在 System.Text.RegularExpressions 名称空间中。

在 Regex 类中使用 IsMatch 方法判断所匹配的字符串是否满足正则表达式的要求。

在 Regex 类中还提供了很多方法来操作正则表达式


字符

描述

\

转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反过来

(pattern)

匹配 pattern 并获取这一匹配

(?:pattern)

匹配 pattern 但不获取匹配结果

(?=pattern) 

正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串

(?!pattern)

负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串

x|y

匹配x或y。例如,‘z|food’能匹配“z”或“food”。‘(z|f)ood’则匹配“zood”或“food”

[xyz]

字符集合。匹配所包含的任意一个字符。例如,‘[abc]’可以匹配“plain”中的‘a’

[^xyz] 

负值字符集合。匹配未包含的任意字符。例如,‘[^abc]’可以匹配“plain”中的‘p’

[a-z]

匹配指定范围内的任意字符。例如,‘[a-z]’可以匹配'a'到'z'范围内的任意小写字母字符

[^a-z]

匹配不在指定范围内的任意字符。例如,‘[^a-z]’可以匹配不在‘a’~‘z’'内的任意字符

\B

匹配非单词边界

\D

匹配一个非数字字符,等价于 [^0-9]

\f 

匹配一个换页符

\n

匹配一个换行符

\r

匹配一个回车符

\S

匹配任何非空白字符

\t

匹配一个制表符

\v

匹配一个垂直制表符。等价于 \x0b 和 \cK

\W

匹配任何非单词字符。等价于‘[^A-Za-z0-9_]’

一些常用的正则表达式,如下表所示。


编号

正则表达式

作用

1

\d{15}|\d{18}

验证身份证号码(15位或18位)

2

\d{3}-\d{8}|\d{4}-\d{7} 

验证国内的固定电话(区号有3位或4位,并在区号和电话号码之 间加上-)

3

^[1-9]\d*$ 

验证字符串中都是正整数

4

^-[1-9]\d*$

验证字符串中都是负整数

5

^-?[1-9]\d*$

验证字符串中是整数

6

^[A-Za-z]+$

验证字符串中全是字母

7

A[A-Za-z0-9]+$

验证字符串由数字和字母构成

8

[\u4e00-\u9fa5]

匹配字符串中的中文

9

[^\x00-\xff] 

匹配字符串中的双字节字符(包括汉字)

在线正则表达式测试工具:

​https://www.hake.cc/tools/regex/​

在线可视化工具:

​https://c.runoob.com/front-end/7625/#!flags=&re=%5E(a%7Cb)*%3F%24​