在正则表达式中,元字符通常一次只能匹配一个位置或字符集合中的一个字符。通常情况下,如果要匹配数字、字母、空白等字符时,可以直接使用与这些集合相对应的元字符。然而,如果要匹配的字符集合(如集合[0,1,2,3,4,5])没有与之相对应的元字符时,则需要自定义匹配的字符集合。此时,可以使用字符类解决这个一个问题。字符类是一个字符集合,如果该字符集合中的任何一个字符被匹配,则它就会找到该匹配项。
字符类是正则表达式中的“迷你”语言,可以在方括号“[]”中定义。最简单的字符类是方括号“[]”和一个字母表表构成,如元音字符类[aeiou]。以下正则表达式匹配数字0、1、2、3、4、5、6中的任何一个。
[0123456] (20)
以下正则表达式可以匹配任何数字(即0、1、2、3、4、5、6、7、8、9)。
[0123456789] (21)
以下正则表达式匹配HTML标记中的“<H1>”、“<H2>”、“<H3>”、“<H4>”、“<H5>”或“<H6>”。
<H[123456]> (22)
以下正则表达式匹配字符串“Jack”或者“jack”。
[Jj]ack (23)
然而,正则表达式[0123456789]的书写非常不方便。因此,正则表达式引入了连接符“-”定义字符的范围。以下正则表达式等价于正则表达式[0123456789]。
[0-9] (24)
以下正则表达式可以匹配任何小写字母。
[a-z] (25)
以下正则表达式可以匹配任何大写字母。
[A-Z] (26)
注意:当且仅当在字符类中的连接符“-”不是第一个字符时,它才具有特殊的含义:它可以指定字符类的最大边界和最小边界之间的任何字符。它的具体含义由具体的字符类决定。因此,字符类的最大边界和最小边界,以及字符在ASCII或Unicode表中出现的顺序共同确定了连接符“-”指定的字符的范围。
如果要在字符类中包括连接符“-”,则必须将它作为第一个字符。如正则表达式[-a]匹配字符“-”或者“a”。
在字符类中,若字符“^”是字符类的第一个字符,则表示否定该字符类,即匹配除了该字符类之外的任意字符。以下正则表达式可以匹配任何非元音字符。
[^aAeEiIoOuU] (27)
以下正则表达式可以匹配除连接符“-”之外的任何字符。
[^-] (28)
以下正则表达式匹配字符a之后不是字符串b的字符串。
a[^b] (29)
使用工具Regex Tester测试正则表达式(29),结果如图所示。