正则匹配IP

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,用正则表达式可以写成:1\d{2}

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

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

与大家互动一下:


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


我使用的正则表达式验证工具,The Regulator 下载地址:http://sourceforge.net/projects/regulator/

 
时间: 2024-10-14 16:40:09

正则匹配IP的相关文章

怎样通过正则匹配IP地址

Ipv4的地址是0.0.0.0 到 255.255.255.255, 匹配这个字段需要判断三种情况: 1. 如果第一位是0或1, 则第二位和第三位可以是0-9的任意数值: [01]\d\d 2. 如果第一位是2, 第二位是0-4, 那第三位可以是0-9的任意数值: 2[0-4]\d 3. 如果第一位是2, 第二位是5, 那第三位只能是0-5的之间的数值: 25[0-5] 上面三种情况整合起来就得到下面的正则, 前三个数后面是有一个"."的, 所以归为一组, 匹配3次, 后面三个数没有点

Linux grep 命令正则匹配IP地址

1,以nginx的access.log日志为例grep -o "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" /var/log/nginx/access.log egrep -o "([0-9]{1,3}.){3}[0-9]{1,3}" /var/log/nginx/access.log 2,以上两个是过滤出具体的IP 来 ,如果想统计IP ,可以 加上 sort 和uniq 命令来统计 每个IP出现的次数并排序,下面的命

java进行ip号码段正则匹配

java正则匹配IP号码段 public static boolean IPMatch(List ips, String ip) { if (ips.contains(ip)) { return true; } for (int i = 0; i < ips.size(); i++) { List lip = Arrays.asList(ips.get(i).toString().split("\\.")); String re = "^"; for (int

python匹配ip正则

python匹配ip正则 #!/usr/bin/env python # -*- coding:utf-8 -*- import re ip_str = "asdad1.1.1.1sdfwe2.6.5.7sdfsf2.3.94.5sdf200.198.25.0" res = [] for i in range(1): ip_t = True m_ind = 0 while ip_t: m = re.search(r"(((2([0-4]\d|5[0-5])|((1\d|[1-

python 正则RE匹配IP地址

使用re库匹配IP地址 一.说明 ip地址为xxx.xxx.xxx.xxx,其中xxx为0-255直接数字. 本文匹配为(1-255).(0-255).(0-255).(1-254) 二.匹配表达式 1 ip_match = r"^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|0?[0-9]?[1-9])\.)(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){2}(?:25[0-4]|2[0-4][0-9]|1[0-9][0-

php正则匹配用户名必须包含字母和数字且大于6位

php正则匹配用户名必须包含字母和数字且大于6位 UEditor 1.4.3版本中去掉本地自动保存功能 右键菜单没有新建文本文档txt 常见HTTP错误代码大全 http常见状态码 eclipse内存溢出错误 为什么井盖是圆的?--揭开面试题的神秘面目! Linux Centos 6.6搭建SFTP服务器 密码强度检测 JS判断检测用户输入密码强度代码 对程序员来说,提高薪水最好的建议是什么? CSS3仿淘宝右侧固定导航悬浮层 jQuery仿淘宝网登录拖动滑块验证码代码 jQuery单击div更

js截取相应的域名----正则匹配法 和校验Url 正则表达式

js截取相应的域名----正则匹配法 和校验Url 正则表达式 用javascript截取相应的域名方法两种,供大家参考 1.方法1: [javascript] view plain copy function domainURI(str){ var durl=/http:\/\/([^\/]+)\//i; domain = str.match(durl); return domain[1]; } 调用:var domain=domainURI(document.location.href);

使用正则表达式匹配IP地址

如何使用正则表达式匹配IP地址?这是很常见的任务.说难也难,说易也易,取决于在匹配的精确度以及正则表达式复杂度之间很好的折中. 通常,IP地址以点分十进制方式表示,IP地址分为4段,以点号分隔.要对IP地址进行匹配,首先要对其进行分析.0.0.0.0 - 255.255.255.255 一个简单的正则表达式: [0-9]+(?:\.[0-9]+){0,3} 或者 ^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$ 它能够完成我们的任务,但是像"3948.3.89.34238"

常用的JavaScript正则匹配规则代码收藏,很实用

收集一些常用的JavaScript正则表达式匹配规则,比如匹配电话号码.Email.中文字符.身份证号.邮编.QQ号.过滤空白行.匹配特定数字等.觉得这玩意是很有用的,只不过自己水平菜,老是自己写不出,看了这个文档,觉得心里踏实很多,用到正则匹配的时候,看下这个,相信为让你省不少时间.注:本正则不仅限于在JS中使用,其它语言也可以借鉴. 匹配特定数字: ^[1-9]\d*$ //匹配正整数 ^-[1-9]\d*$ //匹配负整数 ^-?[1-9]\d*$ //匹配整数 ^[1-9]\d*|0$