一、匹配多个字符中的某一个
正则表达式是区分大小写的,比如使用正则表达式cat可以匹配文本cat而不能匹配文本CAT,如果我们要匹配出含有文本cat的所有结果,而不关心它们大小写的问题,这是就要需要使用元字符'['和元字符']'来创建一个字符集合,[]方括号间的所有字符组成了字符集合,字符集合的匹配结果是能够与该集合的任意一个成员相匹配的文本。
例子:
文本:cat Cat CAT
正则表达式:cat
结果:cat Cat CAT
文本:cat Cat CAT
正则表达式:[Cc][Aa][Tt]
结果:cat Cat CAT
使用[Cc]便可以匹配C或者c的任意一个,一个单独的'[]'不管字符集合多大,只匹配一个字符。
二、使用字符集合区间
假如有这样的一份文本:包含很多三位数很其他的无关文本,而我们只想把这些三位数匹配出来,使用字符集合可以这样写[0123456789][0123456789][0123456789],但这样写过于繁琐,如果要匹配二十六个字母中的任一个大写字符,则字符集合里的字符个数将为26个,如果不区分大小写,将为52个,写起来非常繁琐,所以可以使用元字符'-'来 创造字符区间(0-9, a-z,A-Z等)来简化写法,如[0-9]=[0123456789],需要注意的是,字符区间的首字符要大于等于尾字符,[0-9]不可以写成[9-0],并且字符区间可以叠加, 比如[0-9a-z]=[0123456789abcdefghijklmnopqrstuvwxyz],,另外'-'也是一个特殊的元字符,在'['和‘]’之间时,'-'为元字符,但在之外的地方,‘-’只是一普通字符,匹配它不需要 用'\'转义。
例子:
文本:123 456 a21
正则表达式:[0-9][0-9][0-9]
结果:123 456 a21
文本:123 456 a21
正则表达式:[a-z][0-9][0-9]
结果:123 456 a21
三、取非匹配
使用字符集合(区间)可以来匹配集合(区间)中的任一字符,而有时我们想匹配除此字符集合(区间)以外的任意字符,这时就要使用元字符'^'来对字符集合(区间)进行取非操作。
文本:123 456 a21 &13
正则表达式:[^0-9][0-9][0-9]
结果:123 456 a21 &13
空格不在0-9之间,所以也被匹配了出来。
使用取非匹配需要注意的是,‘^’的效果将作用于给定字符集合里的所有字符或字符区间,而不是紧跟在'^'字符后面的哪一个字符或者字符区间。
四、匹配特定的字符类别
使用字符区间可以在一定程度上简化我们的操作,但是当要匹配的字符非常多时写起来也非常繁琐,这时我们就可以用一些特殊的元字符来匹配一些特殊的字符集合,比如\d=[0-9]=[0123456789],而将d大写成D,则代表着取非操作\D=[^0-9]。常见的特殊元字符如下:
元字符 含义
\d 任何一个数字字符,等价于[0-9]
\D 任何一个非数字字符,等价于[^0-9]
\w 任意一个字母(大小写均可),数字或下划线,等价于[a-zA-Z0-9_]
\W 任意一个非字母数字或者非下划线,等价于[^a-zA-Z0-9_]
例子:
文本:1234 12345 a1b2c3 abcdef c2d3f2 a2d3ff
正则表达式:\w\d\w\d\w\d
结果:1234 12345 a1b2c3 abcdef c2d3f2 a2d3ff