加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

IP地址的正则表达式

发布时间:2020-12-13 19:48:17 所属栏目:百科 来源:网络整理
导读:关键字: IP地址 正则表达式 作者:txw1958 出处: http://www.cnblogs.com/txw1958/archive/2011/10/13/ip_address_regular_expression.html IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用英文句点“.”隔开

关键字:IP地址 正则表达式
作者:txw1958
出处:http://www.cnblogs.com/txw1958/archive/2011/10/13/ip_address_regular_expression.html

IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用英文句点“.”隔开。例如:某台计算机IP地址为10.11.44.100。

分析IP地址的组成特点:250-255、200-249、0-199。
这三种情况可以分开考虑,
1. 250-255:特点:三位数,百位是2,十位是5,个位是0~5,用正则表达式可以写成:25[0-5]
2. 200-249:特点:三位数,百位是2,十位是0~4,个位是0~9,用正则表达式可以写成:2[0-4]d
3. 0-199:这个可以继续分拆,这样写起来更加简单明了.
3.1. 0-9: 特点:一位数,个位是0~9,用正则表达式可以写成:d
3.2. 10-99: 特点:二位数,十位是1~9,个位是0~9,用正则表达式可以写成:[1-9]d
3.3. 100-199:特点:三位数,百位是1,十位是0~9,个位是0~9,用正则表达式可以写成:1d{2}

于是0-99的正则表达式可以合写为[1-9]?d,那么0-199用正则表达式就可以写成(1d{2})|([1-9]?d),这样0~255的正则表达式就可以写成(25[0-5]|2[0-4]d|((1d{2})|([1-9]?d)))
最后,前面3段加上句点.可以使用{3}重复得到,第4段再来一次同样的匹配,得到IP地址的正则表达式:

((?:(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))).){3}(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))))

与大家互动一下:

1. 为什么三位数的匹配放在二位数/一位数的前面?因为正则表达式规则之一:最先开始的匹配拥有最高的优先权。
2. 0.0.0.0和255.255.255.255是合法存在的IP地址,你知道是为什么吗?
3. 192.169.01.108这种数字前面多带了个0的类型的,在这里不是合法的,为什么要这样?
4. 为什么前面在最前面要有?:呢?它在这里有什么用?
5. 如果您发现本表达式有错误,也请留言指正!

#1楼 2012-07-26 16:20 小子欠扁
(?: 匹配不获取
支持(0) 反对(0)
#2楼 [ 楼主] 2012-09-05 22:33 txw1958
@小子欠扁 不对哦
支持(0) 反对(0)
http://pic.cnitblog.com/face/340216/20130404192440.png
#3楼 2012-09-06 08:56 小子欠扁
@txw1958
怎么不对,用小括号的时候会匹配到分组里面去,加上?:就不会捕获到分组了
支持(0) 反对(0)
#4楼 [ 楼主] 2012-09-13 23:54 txw1958
@小子欠扁 对了
支持(0) 反对(0)
http://pic.cnitblog.com/face/340216/20130404192440.png
#5楼 2012-09-19 17:53 竹墨轩
貌似222.16.228.22a或222.16.228.2ba可以通过正则验证,不知什么原因?博主可否详细介绍?:用法,有点不清楚哦,谢谢!
支持(0) 反对(0)
http://pic.cnitblog.com/face/u306032.jpg?id=03220912
#6楼 [ 楼主] 2012-09-19 20:52 txw1958
@竹墨轩 只匹配数字部分,字母部分没有包括进来
支持(0) 反对(0)
http://pic.cnitblog.com/face/340216/20130404192440.png
#7楼 [ 楼主] 2012-09-21 10:00 txw1958
@竹墨轩 ?: 不分组
支持(0) 反对(0)
http://pic.cnitblog.com/face/340216/20130404192440.png
#8楼 2012-09-30 12:16 duandetao
0.x.x.x,x非零,是不合法的ip地址
是否要考虑进去,这样就复杂多了
支持(0) 反对(0)
#9楼 [ 楼主] 2012-11-07 15:54 txw1958
@duandetao 这样的话,建议进行二次匹配,
支持(0) 反对(0)
http://pic.cnitblog.com/face/340216/20130404192440.png
#10楼 2012-11-15 10:12 sznszbd
错误:
192.168.0.12201212 校验通过!
支持(0) 反对(0)
#11楼 [ 楼主] 2012-11-15 16:50 txw1958
@sznszbd 正则表达式是用来匹配的
支持(0) 反对(0)
http://pic.cnitblog.com/face/340216/20130404192440.png
#12楼 2013-02-01 15:56 一杯子幸福
@duandetao
((25[0-5])|(2[0-4]d)|(1dd)|([1-9]d)|[1-9])(.((25[0-5])|(2[0-4]d)|(1dd)|([1-9]d)|d)){3}这个可以
支持(0) 反对(0)
#13楼 2690879 2013/5/27 15:33:24 2013-05-27 15:33 iHymenz
这个正则式不对啊,255.0.0.256的匹配结果是255.0.0.25

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读