2014年03月21日 22:52:46

正则匹配IP地址

作者: 
本文分析IP地址的正则匹配。
1. 局部匹配 or 完整匹配
正则:

((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)


解析:

此正则的核心是25[0-5]|2[0-4]\d|[01]?\d\d?,代表每一个ip段;

首先明确ip段的区间为0-255,因为正则处理有先后顺序,避免小的先满足匹配,

因此从大到小安排;

a. 25开头只有250-255,因此得到25[0-5];

b. 200-249第三个数字可以为任意值,第二个数字为0-4,因此得到2[0-4]\d;

c. 最后0-199可以看成000-199,可以看出,第一个数字域为0-1,第二个为0-9,第三个也为0-9,

因此得到[01]\d\d,可是还有2位数和1位数的情况,因此两位数为(删掉[01]) :

\d\d,一位数为删掉([0-1]?和后面的\d?):\d,<br />因此最终为[01]?\d\d?;

各个情况相互独立,因此拼接成25[0-5]|2[0-4]\d|[01]?\d\d?,而ip前3段后面都带

有“.”,因此前3段重复,最后再加一段,“.”是特殊字符,需要转义,因此为“\.”

最终得到:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)

2. 完整匹配
正则:

^((25[0-5]|2[0-4]\d|[01]?\d\d?)($|(?!\.$)\.)){4}$


解析:

此正则将4段合并到一起,通过判断是否结束来控制ip段中的.的出现。

重点在后面($|(?!\.$)\.),此段要求当前字符要么为结束,要么不是以.结束,其后加.。

也就是说可以为ip段结束或者ip段.后面还有字符,实现效果非最后一个ip段后面才能有“.”。


未经同意禁止转载!
转载请附带本文原文地址:正则匹配IP地址,首发自 Zjmainstay学习笔记
阅读( 7457 )
看完顺手点个赞呗:
(5 votes)

1.PHP cURL群:PHP cURL高级技术
2.正则表达式群:专精正则表达式
3. QQ联系(加请说明):QQ联系博主(951086941)
4. 邮箱:zjmainstay@163.com
5. 打赏博主:

网站总访问量: