ip 地址的正则匹配写起来也没有想想地那么简单,还是有一些陷阱的
IP 地址分 4 段,每段的范围是 0-255
1. 最简单的版本
简单写,可以写成
1 | \d+.\d+.\d+.\d+ |
但是这个不够精确,因为没有限制数字的个数,如果是 1234.1.23.4567 这样的也是成立的,但是这不是合法的 IP 地址
2. 限制数字的个数
1 | \d{1,3}.\d{1,3}.\d{1,3}.\d{1,3} |
现在数字的个数限制了,但是数字的范围没有限制,比如 300.300.300.300 这样的虽然可以匹配,但不是合法的 IP 地址
3. 限制数字的范围
精确写法:
范围 | 正则表达式 |
---|---|
0-99 | [1-9]?\d |
100-199 | 1\d{2} |
200-249 | 2[0-4]\d |
250-255 | 25[0-5] |
可以用正则表达式的或操作符: |
和括号把以上这些表达式拼接起来
可以得到下列的伪代码
1 | (0-99 | 100-199 | 200-249 | 250-255).(0-99 | 100-199 | 200-249 | 250-255).(0-99 | 100-199 | 200-249 | 250-255).(0-99 | 100-199 | 200-249 | 250-255) |
转换成正则表达式就是
1 | (([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]) |
总结
IP 地址的正则表达式是
1 | (([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]) |