加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Python 正则表达式匹配IP地址

(2017-05-09 11:30:14)
分类: Python
IP地址分为4个段,每个段上可能的取值如下
0-9        
10-99
100-199
200-249
250-255

0-9          [0-9]    
10-99        [1-9][0-9]
100-199      1[0-9][0-9]  
200-249      2[0-4][0-9]
250-255      25[0-5]

通常,IP地址以点分十进制方式表示,IP地址分为4段,以点号分隔。要对IP地址进行匹配,首先要对其进行分析,一个简单的正则表达式:
^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$  匹配 0.0.0.0 - 255.255.255.255  

它能够完成我们的任务,但是像"394.3.89.342"这种字符串也会被匹配到,而我们IP地址的范围0-255之间的值

所以我们需要更加精确地进行匹配:
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

分析过程:
1、IP地址分为4个段,每个段上可能的取值如下
0-9        
10-99
100-199
200-249
250-255

2、正则表达式为:
0-9          [0-9]    
10-99        [1-9][0-9]
100-199      1[0-9][0-9]  
200-249      2[0-4][0-9]
250-255      25[0-5]

3、进行合并
0-9,10-99,100-199合并为0-199
[01]?[0-9][0-9]?

4、进行组合
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

最后,匹配IP地址的正则表达式为:
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

注意:这个正则表达式是完全匹配IP地址,如果一个字符串除了IP地址,还有其他字符,那么
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
不适用,而应该是:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有