本人给出的实数的正则表达式(可能不对):
^\-?([1-9]\d*|0)(\.\d+)?$
思考过程:
整数
整数包括:0,正整数,负整数
0
0的正则:
^0$
正整数
正整数(必须为1-9开头,后面[0-9]0个或多个)的正则:
^[1-9]\d*$
负整数
负整数(正整数前加"-"):
^\-[1-9]\d*$
0,正整数和负整数合并起来就是整数:
^\-?[1-9]\d*|0$
小数
(这里说的时末尾可以为0的小数)
错误想法(经评论指出):小数就是整数加上小数点再加上1个或多个[0-9]
^(\-?[1-9]\d*|0)\.\d+$
上面这个会漏掉一种情况,小数点左边部分是(-0),则不是整数,但它能组成小数。(-0)加上小数点再加上1个或多个[0-9]也是小数,比如-0.01。
想了下应该这样做,把小数分成2个部分,正小数和负小数,负小数就是正小数前加负号。
那么小数可以写成这样:
^\-?([1-9]\d*|0)\.\d+$
"|"会作用于左边的全部范围,所以要加括号。
实数
(末尾可以为0)
实数包括整数和小数(没有(.\d+)这部分就是整数,有这部分就是小数):
^\-?([1-9]\d*|0)(\.\d+)?$
有错请帮忙指正,谢谢。