普通字符是正则表达式中最基本的结构之一,要理解正则表达式自然也要从普通字符开始。本小节主要介绍普通字符。
普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和其他一些符号。
先以数字举例说明。假设要判断一个长度为1的字符串是否为数字(即这个位置上的字符只能是“0”“1”“2”“3”“4”“5”“6”“7”“8”“9”这十个数字),如果使用程序来判断,那么一个可能的思路是用十个条件分支去判断这个字符串是否等于这十个字符。伪代码如下:
这不失为一种有效的办法,但是过于烦琐。如果判断的是英文字母或者长度非常长并且可能是各种字符混合的字符串时,代码就几乎无法被阅读了。而使用普通字符就可以非常简单地解决此类问题,代码示例如下:
上面的代码示例是判断一个长度为1的字符串是否为数字的正则表达式。方括号“[]”表示这是一个字符组,代表一位字符。方括号中的数字“0123456789”表示只要待匹配的字符串与其中任何一个字符相同,就会认为匹配成功,反之则认为匹配失败。
当然还有更简单的写法:
如果符合规则的字符范围是连续的,可以用“-”省略,相当于汉语中的“到”,可以直接读成“零到九”。
为什么是0-9而不是9-0呢?要理解这个问题,必须要了解字符的本质。在正则表达式中所有的字符类型都有对应的编码,图8.2.1便是一张ASCII编码表。例如,字符“0”对应的是十进制的48,“9”对应的是十进制的57。码值小的在前,码值大的在后。所以判断数字只需写成“[0-9]”。
同理,如果想判断一个长度为1的字符串是不是英文小写字母,可以写成:(www.xing528.com)
注意:虽然ASCII编码表中大写字母在小写字母之前,但是并不应该用“[A-z]”来包括所有大小写英文字母,因为在这个范围中包含了其他特殊字符,严谨的方法应该是“[A-Za-z]”或者“[a-zA-Z]”。
图8.2.1 ASCII编码表
那么如何判断一个长度为2的字符串是否为数字呢?
只要写两遍就行了(下一节将会介绍更简洁的方法)。假设要判断用户输入的是“Y”或者“y”,正则表达式只需写成:
当允许的字符范围只有一个时则可以省略“[]”。例如,判断用户输入的是“Yes”或者“yes”:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。