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])  |