正则表达式应用:匹配IP地址
来源:互联网 发布:js鼠标经过事件 编辑:程序博客网 时间:2024/06/05 19:18
都知道iP地址有四个数值,三个点号组成。三个数值的具体范围为0到255,为了使用正则表达式匹配就必须分析IP地址的组成
1先分析数值,2再组合数值和点号
1先分析数值
IP地址的数字范围从0到255,再细分就是0到99,100到199,200到249,250到255
匹配 0到99的正则表达式是:\d{1,2},含义就是匹配1位或者是两位数字也可以写成[0-9]{1,2}
匹配 100到199的正则表达式是:1\d{2,2},,含义就是以1开头,后边有2个数值也可以写成1[0-9]{2,2}的三位数
匹配 200到249的正则表达式是:2[0-4][0-9],含义就是以2开头,中间是0到4之间的数值,最后是0到9之间的数字的三位数
匹配 250到255的正则表达式是:25[0-5],含义就是以25开头,后边是0到5之间的数值的三位数
所以为了匹配0到255之间的数字,正则表达式为:(\d{1,2})|(1\d{2,2})|(2[0-4][0-9])|(25[0-5])
2再组合数值和点号
IP地址是数值+点号+数值+点号+数值+点号+数值,也就是:数值+点号重复三次,在匹配一个数值
因此匹配IP的正则表达式为:(((\d{1,2})|(1\d{2,2})|(2[0-4][0-9])|(25[0-5]))\.){3,3}((\d{1,2})|(1\d{2,2})|(2[0-4][0-9])|(25[0-5]))
如果需要验证IP地址的话,只需要加上前缀^,后缀$,正则表达式为:^(((\d{1,2})|(1\d{2,2})|(2[0-4][0-9])|(25[0-5]))\.){3,3}((\d{1,2})|(1\d{2,2})|(2[0-4][0-9])|(25[0-5]))$
测试代码:
private static void Test() { List<string> ipList = new List<string>(); string ip = "25 23.245.67.899,,255.245.0.,255.245.0,23.245.67.89,255.245.23.9,255.245.0.9"; // Regex reg2 = new Regex(@"^(((\d{1,2})|(1\d{2,2})|(2[0-4][0-9])|(25[0-5]))\.){3,3}((\d{1,2})|(1\d{2,2})|(2[0-4][0-9])|(25[0-5]))$");验证IP的正则表达式 Regex reg = new Regex(@"(?<ip>(((\d{1,2})|(1\d{2,2})|(2[0-4][0-9])|(25[0-5]))\.){3,3}((\d{1,2})|(1\d{2,2})|(2[0-4][0-9])|(25[0-5])))"); Match m = reg.Match(ip); foreach (Match item in reg.Matches(ip)) { ipList.Add(item.Groups["ip"].Value); } }
以上只是初步完成了IP地址的匹配,基本够用了,但依然会匹配一些错误的IP,例如0.0.0.0,123.123.123.123.123.123,如果需要去除此类的错误,还需要进一步修改正则表达式。
使用以上的正则表达式,匹配172.21.21.126,得到172.21.21.12,少了一位数字6.是因为先匹配了\d{1,2},导致最后一位6没有匹配上
\d{1,2}
修改如下:同时去掉去掉第一位是0的IP,例如0.123.45.23.4这类错误的IP。
^(1\d{2,2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]?)(\.(1\d{2,2}|2[0-4][0-9]|25[0-5]|[0-9]{1,2})){3,3}$
先匹配1开头的三位数值,1\d{2,2}
在匹配2开头的三位数字,2[0-4][0-9]
匹配25开头的三位数字,25[0-5]
最后在匹配一位或者是两位的数字[1-9][0-9]?
修正掉127.01.03.07这类IP,同时允许中间的数值为0
^(1\d{2,2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[1-9])(\.(1\d{2,2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])){3,3}$
先匹配1开头的三位数值,1\d{2,2}
在匹配2开头的三位数字,2[0-4][0-9]
匹配25开头的三位数字,25[0-5]
匹配两位的数字[1-9][0-9]
最后在匹配一位的数字[0-9]
- 正则表达式应用:匹配IP地址
- 正则表达式匹配ip地址
- 正则表达式匹配IP地址
- 一个匹配IP地址的正则表达式
- java匹配IP地址正则表达式
- 使用正则表达式匹配ip地址是否合法
- Java正则表达式匹配IP地址
- javascript正则表达式模糊匹配IP地址
- 匹配IP地址的正则表达式实例
- 利用正则表达式匹配IP地址
- 关于Python正则表达式匹配IP地址
- 正则表达式应用:匹配email地址
- Shell script - 如何用正则表达式匹配IP地址
- 匹配ip地址的正则表达式(非常实用)!
- Java正则表达式IP地址和邮箱匹配
- 正则表达式——IP地址的匹配
- 匹配IP地址的正则表达式(java)
- IP地址正则表达式
- OpenStack虚拟机创建过程中镜像格式的的变化过程
- 异构系统就是异构数据库系统?
- 如何查看端口号是否被占用
- ASP无惧上传类不能上传中文双引号文件及ASP函数InStr存在bug
- UML类图中的6种关系
- 正则表达式应用:匹配IP地址
- 任意一个字符 . 与重复字符 *
- ClassForName类装载与new实例化区别
- 常见的数据结构和算法
- 0906
- document.all.WebBrowser.ExecWB的完整说明
- linux下面一些命令整理
- Drainage Ditches
- poj 2709 Painter