本文虽然给出了匹配IPv4地址的正则表达式,但是更重要的是提供写正则表达式的一种思路。有时候使用程序而不是正则表达式可能是更好的解决方案。
IPv4地址格式可表示为:XXX.XXX.XXX.XXX,XXX的取值范围是0-255,前三段加一个.重复了三次,再与最后一段合并即组成IPv4地址的完整格式。
重点是将0-255用正则表达式表示,以下分几种方法,来分析解决。
方法1
取值区间 | 特点 | 正则写法 |
---|---|---|
0-9 | 取值是0-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] |
最终结果:
^((\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$
方法2
取值区间 | 特点 | 正则写法 |
---|---|---|
0-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] |
最终结果:
^(([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])$
方法3
取值区间 | 特点 | 正则写法 |
---|---|---|
0-99及110-199 | 百位:1或空,十位:1-9或空,个位:0-9 | 1?[1-9]?\d |
100-149及200-249 | 百位:1或2,十位:0-4,个位:0-9 | [1-2][0-4]\d |
250-255 | 百位:2,十位:5,个位:0-5 | 25[0-5] |
最终结果:
^((1?[1-9]?\d|[1-2][0-4]\d|25[0-5])\.){3}(1?[1-9]?\d|[1-2][0-4]\d|25[0-5])$