根据上一章的介绍,可以用字符组[0-9]
或者\d
来匹配单个数字字符。现在用正则表达式来验证更复杂的字符串,比如大陆地区的邮政编码。
粗略看来,邮政编码并没有特殊的规定,只是6位数字构成的字符串,比如100000、030500、100858等。所以用正则表达式来表示就是\d\d\d\d\d\d
。这样虽然不难理解,但\d
重复了6次,读写都不方便。为此正则表达式提供了量词(quantifier),比如上面的表达式可以简写为\d{6}
,它使用阿拉伯数字表示次数。
量词还可以表示不确定的长度,其通用形式是{m,n}
,其中m
和n
是两个数字(量词中的逗号之后绝对不能有空格),它限定之前的元素能够出现的次数,m
是下限,n
是上限(均为闭区间)。比如\d{4,6}
,就表示这个数字字符最少出现4次,最多出现6次。
如果不确定长度的上限,也可以省略。可以写成\d{m,}
,比如\d{4,}
表示“数字字符出现4次以上”。
量词限定的出现次数一般都有明显的下限,如果没有,则默认为0。比如Ruby支持{,n}
的记法,这时并不是不确定长度的下限,而是省略了下限为0的写法。不过这种用法不是所有的语言都通用的,所以最好写成{0,6}
。
表2-1 量词的一般形式
量词 | 说明 |
---|---|
{n} | 之前的元素必须出现n次 |
{m,n} | 之前的元素最少出现m次,最多出现n次 |
{m,} | 之前的元素最少出现m次,无上限 |
{0,n} | 之前的元素可以不出现,也可以出现,最多出现n次 |