当前位置: 首页 > news >正文

IP地址的正则表达式

为什么80%的码农都做不了架构师?>>>   hot3.png

IP地址的正则表达式

关键字: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,用正则表达式可以写成: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/

 

如果您觉得本文对您有帮助,并且愿意感谢我,那您可以考虑给我捐赠

转载于:https://my.oschina.net/ski/blog/108907

相关文章:

  • [CTO札记]盛大文学公司名称对联
  • Linux 各文件夹作用
  • Groundwork:响应式 HTML5,CSS JavaScript 工具包
  • 主机安全检测nessus的安装以及配置
  • Android应用程序组件Content Provider的启动过程源代码分析(7)
  • ipv6
  • Docker--------registry私有仓库搭建 [ Http ]
  • 实战:Windows Server 2008 活动目录 传送和争夺操作主控角色
  • AIX 5.3 Install Oracle 10g RAC 错误集锦--9i RAC present
  • All Our N-gram are Belong to You
  • 域用户权限|运行软件
  • 使用GitHub进行版本管理
  • RAC 开启gsd和oc4j服务
  • 让LINUX发出声音
  • 如何在Linux单用户模式下修改fstab文件
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Docker入门(二) - Dockerfile
  • Golang-长连接-状态推送
  • JavaScript中的对象个人分享
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Linux Process Manage
  • nodejs:开发并发布一个nodejs包
  • npx命令介绍
  • Object.assign方法不能实现深复制
  • PaddlePaddle-GitHub的正确打开姿势
  • win10下安装mysql5.7
  • 初识 webpack
  • 对JS继承的一点思考
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 无服务器化是企业 IT 架构的未来吗?
  • 携程小程序初体验
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • # Apache SeaTunnel 究竟是什么?
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (1)bark-ml
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .describe() python_Python-Win32com-Excel
  • .dwp和.webpart的区别
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net 验证控件和javaScript的冲突问题
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • [28期] lamp兄弟连28期学员手册,请大家务必看一下
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)
  • [C#]扩展方法
  • [emuch.net]MatrixComputations(7-12)