现在的位置: 首页 > 综合 > 正文

IPv4 地址匹配 正则表达式

2013年12月05日 ⁄ 综合 ⁄ 共 656字 ⁄ 字号 评论关闭

最近在学习正则表达式的时候发现一个很好的入门网页:

http://deerchao.net/tutorials/regex/regex.htm#metacode

 

 

在介绍分组的时候,举了一个ip地址匹配的例子:

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

这个表达式的/d/d?)处应该修改为/d?/d 分析如下:

1)IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用英文句点“.”隔开。以255.226.168.1为例,可以分析出IP地址的组成特点,250——255、200——249、0——199

2)

250——255,用正则可以写成:25[0-5];

200——249可以这样写:2[0-4]/d;

0——199有些麻烦,不过可以继续分拆,这样写起来更加简单明了,0——9、10——99、100——199,这样分开考虑,就得到了三个式子:/d、/d/d(有冗余)、1/d/d,这三个式子我们可以像合并同类项一样把它们合并到一起:[01]?/d?/d

这样,一段地址的表达式就是:2[0-4]/d|25[0-5]|[01]?/d?/d

后三段每段数字之前都有一个“.”号,合并起来考虑,前三段数字可以写到一起,第四段单独写,合并得到ip地址匹配的正则表达式:

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

抱歉!评论已关闭.