C#2010 正则表达式语法
C#中兵没有专门的正则表达式类,所有正则表达式都是以普通字符串的方式存储,在调用正则表达式时,需要通过System.Text.RegularExpressions命名空间中的类进行匹配。
1.正则表达式的组成
典型的正则表达式字符串由字符、元字符和非打印符号组成,其分别代表不同类型的字符。
●普通字符
在正则表达式中,字母、数字、汉字、下划线、以及没有特殊定义的标点符号,都是普通字符。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。字符可以组成最简单的正则表达式,用于匹配与其相同的字符串。
●元字符
元字符是在正则表达式中含有特殊意义的字符,其与普通字符相对应。元字符通常由标点符号开始由一个或多个标点符号与字符组成。常用的元字符如表6-5所示。
非打印符号的作用是表示字符串对象中的各种特殊符号,以及某些范围性的符号。在匹配字符串的正则表达式中,编译程序并不会将斜杠“\”作为转义符处理,而是作为非打印字符的识别符号,常用的非打印符号如表6-6所示。
表6-6 常用非打印符号
2.匹配单个字符
在了解了正则表达式的组成之后,开发者可以自行结合正则表达式的组成,尝试编写一些简单的正则表达式规则,以供日后验证字符串使用。
正则表达式可以匹配任意的字符串型变量,既包括匹配只包含一个字符引用的字符串,也可以匹配包含多个字符引用的
字符串,以及匹配包含指定数量字符引用的字符串。
匹配普通字符
在匹配一个单独的字符时,可以使用中括号将将其括住,表示中括号中的正则表达式用于识别一个独立的字符。例如,匹配只包含字母ABCD的字符串,可以将中括号括住ABCD等4个大写字母,如下所示。
[ABCD]
如需要匹配的字符数量较多,且带有一定的连续性,则可以使用破折号“-”将连续字符省略除开头和末尾以外其他的字符。例如,匹配包含字母a到s之间的小写字母,如下所示。
[a-s]
在进行匹配时,如果需要匹配ASCII符号,则可以使用“\x”的方式标识其后的两位16进制数字为ASCII编号。而如需要匹配Unicode符号,则可以使用“\u”的方式标识其后的4位16进制数字为Unicode编号。在下表中,就总结了常用的5
种正则表达式匹配规则,如表6-7所示。
通过转义符或ASCII码等正则表达式的组成部分,判断各种半角符号是否符合正则表达式的要求。在正则表达式中匹配各种标点符号,可以通过转义符来进行,也可以通过标点符号的ASCII码来进行。
通过转义符匹配标点符号,只需要以斜杠“\”和标点符号作为正则表达式的匹配项即可,例如,尖号“^”可以使用斜杠加尖号“\^”,左中括号“[”可以使用斜杠加左中括号“\[”等。
使用ASCII码匹配标点符号,则需要通过ASCII码表中标点符号的ASCII码来匹配。例如,井号“#”的ASCII码为23,则其匹配的正则表达式为“\x23”等。常用的标点符号ASCII码如表6-8所示。
表6-8 常用符号ASCII编码表
例如,匹配字符串是否包含“@”符号时,可以使用\x标识2位16进制数字40实现,如下所示。
\x40
3.匹配指定数量的字符
通过元字符、转义符以及ASCII码等正则表达式的组成部分,可以判断多个字符是否符合正则表达式的要求。正则表达式可以通过点“.”、星号“*”、加号“+”、问号“?”等元字符匹配若干数量的字符或字符串。这些元字符又被称作数量元字符。
除这些元字符外,还可以通过大括号“{}”加数字的方式定义指定数量字符和字符串的匹配。
●点“.”元字符
使用点“.”可以匹配任意单个字符或字符串。例如,单词big和bug都是由字母b和g以及之间的元音字母组成,这两个单词可以通过点“.”来匹配,如下所示。
b.g
●星号“*”元字符
使用星号“*”可以匹配0到任意多个字符或字符串。例如,数字1234567890和数字10,可以通过数字1和0以及星号“*”实现匹配,如下所示。
1*0
●加号“+”元字符
使用加号“+”元字符可以匹配一个或更多的字符或字符串。例如,单词happen 和happy都是由4个字母happ开头,即可以happ和加号“+”实现匹配,如下所示。
(happ)+
需要注意的是加号“+”和星号“*”元字符之间是有区别的。星号“*”元字符可以匹配0个字符,而加号“+”元字符则必须匹配一个以上的字符。
●问号“?”元字符
问号“?”元字符可以匹配0个或1个字符或字符串。例如,该元字符可以匹配单词access中的字母a和e,单不能匹配字母c和s,只能匹配字符串cc和ss,如下所示。
ac?es?
a(cc)?e(ss)?
在上面的两个正则表达式中,由于问号“?”无法匹配两个或以上的字符或字符串,因此,第二个正则表达式无法与access单词匹配。
●大括号“{}”元字符
使用大括号“{}”也可以匹配指定数量的字符或字符串。大括号“{}”元字符有3种使用方法。在大括号“{}”中填入一个正整数后,正整数将表示大括号之前的字符或字符串的重复次数。例如,匹配IEEE1394中出现了3次的字母E,如下所示。
IE{3}1394
在大括号“{}”中填入一个正整数和一个逗号“,”后,可以匹配最小重复次数。例如,匹配数字10000,则以下4个正则表达式均可匹配成功。
10{1,}
10{2,}
10{3,}
10{4,}
开发者还可以在大括号“{}”中填入两个正整数,其中第1个正整数较小,而第2个正整数较大,并在中间以逗号“,”隔开。这样表示重复的范围值。其中,较
小的正整数表示最小重复次数,而较大的正整数则表示最大重复次数。例如,匹配数字10000的正则表达式还可以写为如下的格式。
10{1,4}
4.匹配实数
实数的定义包含整数和浮点数两大类,而整数又可以分为正整数、负整数和0。使用正则表达式,可以对实数的值进行匹配,测试去所属的实数类型。
●匹配正整数
正整数是不包含负号和浮点部分的数字,其首个数字非0。匹配正整数的正则表达式如下所示。
^[1-9]\d*$
●匹配负整数
负整数与正整数最大的区别在于负整数之前会包含一个负号。因此,匹配负整数的正则表达式如下所示。
^-[1-9]\d*$
●匹配所有整数
整数可以分为3类,即正整数、负整数和0。在匹配整数时,可以将正整数、负整数和0分别作为正则表达式的条件,如下所示。
正则匹配前半部分到某个字符结束^([1-9]\d*)|(-[1-9]\d*)|0$
除了上面的方法外,开发者还可以使用问号“?”元字符匹配负号,将正整数和负整数的正则表达式组合起来,如下所示。
^(-?[1-9]\d*)|0$
同理,开发者也可以用以上的方法匹配非负整数和非正整数,如下所示。
^[1-9]\d*|0$
^-[1-9]\d*|0$
●匹配浮点数
浮点数是包括小数部分的数字,在匹配浮点数时需要注意,浮点数的整数部分与整数是不同的。当浮点数字的整数部分位数超过1位时,其首位数字不可以是0。而当浮点数字的整数部分位数只有1位时,这1位是允许为0的。因此,匹配浮点数应从2方面着手。例如,匹配正浮点数的正则表达式,如下所示。
^(([1-9]\d*)|0)\.\d*$
用同样的方式,开发者也可编写匹配负浮点数的正则表达式,如下所示。
^-(([1-9]\d*)|0)\.\d*$
同理,使用问号“?”还可以匹配所有浮点数,如下所示。
^-?(([1-9]\d*)|0)\.\d*$
5.匹配常用字符串
在实际编程中,经常需要对一些带有固定格式的字符串进行匹配,测试这些字符串是否符合特定的格式需求。例如,匹配日期、电话等。此时就需要使用正则表达式。在下面将介绍一些常见的字符串匹配。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论