参考:http://www.cnblogs.com/loveyoume/archive/2016/12/25/6220275.html
http://www.cnblogs.com/kongxianghai/p/3995463.html
http://www.cnblogs.com/olive987/p/5844501.html
IP地址,是由32位数字二进制转为四个十进制的字符串组成。
十进制范围:0~255.0~255.0~255.0~255
①当IP的数字是百位数时,假设第一个数字为1,那么这个数字的范围就为1[0-9][0-9]。
②当第一个数字为2,最大数字是255,当十位数为5时,个位数最大只能为5,而当十位数为0到4时,个位数可以是任意数字,所以就有: 2[0-4][0-9] 和 25[0-5]两种情况
③接下来就是十位数的情况了,假如是十位数,那么十位数的前面第一个数不能为零
十位数的情况可以是:[1-9][0-9]
④个位数的情况就是:[0-9]。
1[0-9][0-9] 2[0-4][0-9] 25[0-5] [1-9][0-9] [0-9]
第一种:^(?:(?:1[0-9][0-9]\.)|(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5])|(?:[1-9][0-9])|(?:[0-9]))$
将0-255用正则表达式表示,可以分成一下几块来分别考虑:
取值区间 | 特点 | 正则写法 | 可合并的写法 | 可合并的写法 | 可合并的写法 |
0-9 | 一位数,只有个位,取值是0~9 | \d | [1-9]?\d | (1\d{2})|([1-9]?\d) |
(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))) |
10-99 | 两位数,十位取值1-9,个位取值是0~9 | [1-9]\d | |||
100-199 | 三位数,最高位取值为1,十位取值0-9,个位取值0-9 | 1\d{2} | - | ||
200-249 | 三位数,最高位取值为2,十位取值0-4,个位取值0-9 | 2[0-4]\d | - | - | |
250-255 | 三位数,最高位取值为2,十位取值5,个位取值0-5 | 25[0-5] | - |
- |
第二种:((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
红色块代表:第一个字符是2,第二个字符是0到4,第三个字符是任意一位数字。表示200~249。
绿色块代表:第一个字符是2,第二个字符是5,第三个字符是0到5。表示250~255。
蓝色块代表:第一个字符是0,或者1,或者可以没有这个字符,第二个字符是任意一位数字,第三个字符是任意一位数字,可以没有这个字符。表示1~199,可以有前导零。
“|”代表“或者”的意思,只要满足三块中的任意一块的意思。
前后的“(”和“)”代表这是一组
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
{3}代表重复三次。比如“255.255.255.”。
第三种:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)