^[1-9]*[1-9][0-9]*$
^[1-9]
这句的意思是,开头必须是从1-9的数
^[1-9]*
加上*代表1-9这个范围内的数字可以重复n次
$
这个是结尾符号
[1-9][0-9]*$
这句话我就看不懂了
为什么可以匹配到正整数呢?我觉得玄机是在 [1-9][0-9]这句话上
^[1-9]*[1-9][0-9]*$
^[1-9]
这句的意思是,开头必须是从1-9的数
^[1-9]*
加上*代表1-9这个范围内的数字可以重复n次
$
这个是结尾符号
[1-9][0-9]*$
这句话我就看不懂了
为什么可以匹配到正整数呢?我觉得玄机是在 [1-9][0-9]这句话上
[1-9]*[1-9]
等价于[1-9]+
,所以整个表达式等价与^[1-9]+[0-9]*$
。
而第一次之后出现的[1-9]
可以归入后面的[0-9]
中,所以可以简化为^[1-9][0-9]*$`,原先的写法太累赘了。