方法一:((???: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))))

方法二:((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

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

方法四:(((2(5[0-5]|[0-4]\d))|1?\d{1,2}).){3}((2(5[0-5]|[0-4]\d))|1?\d{1,2})
(((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2}).){3}((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})
((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}

2(5[0-5]|[0-4]\d) 匹配:200 ~ 255
[0-1]?\d{1,2} 匹配:0 ~ 199

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,十位是04,个位是09,用正则表达式可以写成:2[0-4]\d
  3. 0-199:这个可以继续分拆,这样写起来更加简单明了.
    3.1. 0-9: 特点:一位数,个位是0~9,用正则表达式可以写成:\d
    3.2. 10-99: 特点:二位数,十位是19,个位是09,用正则表达式可以写成:[1-9]\d
    3.3. 100-199:特点:三位数,百位是1,十位是09,个位是09,用正则表达式可以写成: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. 如果您发现本表达式有错误,也请留言指正!

正则表达式:

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

红色块代表:第一个字符是2,第二个字符是0到4,第三个字符是任意一位数字。表示200~249。

绿色块代表:第一个字符是2,第二个字符是5,第三个字符是0到5。表示250~255。

蓝色块代表:第一个字符是0,或者1,或者可以没有这个字符,第二个字符是任意一位数字,第三个字符是任意一位数字,可以没有这个字符。表示1~199,可以有前导零。

“|”代表“或者”的意思,只要满足三块中的任意一块的意思。

前后的“(”和“)”代表这是一组

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

{3}代表重复三次。比如“255.255.255.”。

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

最后这一组的意思同上,就是在“.”后面加上相同的检测。

史上最全IP正则表达式相关推荐

  1. 史上最全PHP正则表达式实例汇总

    收集了一份php正则表达式的实例教程,真心不错,记录下. 正则表达式用于字符串处理.表单验证等场合,实用高效. 一些常用的表达式: $str = preg_replace("/(<a. ...

  2. 史上最全的正则表达式-匹配

    在做项目的过程中,使用正则表达式来匹配一段文本中的特定种类字符,是比较常用的一种方式,下面是对常用的正则匹配做了一个归纳整理. 1.匹配中文:[\u4e00-\u9fa5] 2.英文字母:[a-zA- ...

  3. 【CSDN软件工程师能力认证学习精选】python | 史上最全的正则表达式

    CSDN软件工程师能力认证(以下简称C系列认证)是由中国软件开发者网CSDN制定并推出的一个能力认证标准.C系列认证历经近一年的实际线下调研.考察.迭代.测试,并梳理出软件工程师开发过程中所需的各项技 ...

  4. 史上最全的正则表达式

    刚才浏览网页的时候碰巧看到一篇关于正则表达式的博客.感觉不错,拿开分享一下. 一.校验数字的表达式 1 数字:^[0-9]*$2 n位的数字:^\d{n}$3 至少n位的数字:^\d{n,}$4 m- ...

  5. 史上最全-常见正则表达式集合

    目录 前言 正文 1.邮箱账号,如网易邮箱.qq邮箱.163邮箱等等 2.手机号码 3.性别 4.属于那个民族 5.车牌号信息 6.座机等 7.军官证信息 8.护照号信息等 9.港澳通行证信息 10. ...

  6. 史上最全常用正则表达式

    很多不太懂正则的朋友,在遇到需要用正则校验数据时,往往是在网上去找很久,结果找来的还是不很符合要求.所以我最近把开发中常用的一些正则表达式整理了一下,在这里分享一下.给自己留个底,也给朋友们做个参考. ...

  7. 正则表达式 正整数_史上最全的正则表达式 (1) -- 校验数字的表达式

    很多不太懂正则的朋友,在遇到需要用正则校验数据时,往往是在网上去找很久,结果找来的还是不很符合要求.所以我最近把开发中常用的一些正则表达式整理了一下,在这里分享一下.给自己留个底,也给朋友们做个参考. ...

  8. 史上最全的IP地址详解,速来get

    史上最全的IP地址详解 白在了解虚拟机网络之前,我们首先得了解ip地址是什么? 1.简单局域网的构成 局域网:一般称为内网 简单局域网的构成:交换机.网线.PC(其他IT终端) 交换机:用来组建内网的 ...

  9. Prometheus+Grafana (史上最全)

    尼恩大架构 最强环境 系列文章 一键打造 本地elk 实操环境: ELK日志平台(elasticsearch +logstash+kibana)原理和实操(史上最全) 高级开发必备,架构师必备 一键打 ...

最新文章

  1. 2!=5 or 0在python中是否正确-python中的if判断语句
  2. JZOJ 100043. 【NOIP2017提高A组模拟7.13】第K小数
  3. 【玩转cocos2d-x之七】场景类CCScene和布景类CCLayer
  4. Java与C、C++的区别
  5. 数组转换成json key-value形式
  6. mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
  7. 人的手臂的自由度的数目以及六自由度机械臂的限制
  8. Jquery Ajax 请求示例
  9. java 在圆圈里添加字母,在圆圈内写入数字或字母的方法
  10. 人工势场法--路径规划--原理--matlab代码
  11. MacBookPro 键盘映射
  12. 关于查询界面渲染问题
  13. 发几个flashxp注册码
  14. java毕业设计演唱会门票订售及管理系统Mybatis+系统+数据库+调试部署
  15. windows10上配置pyspark工作环境
  16. 第二次作业-时事点评
  17. 数据库的数据文件和日志文件
  18. aes在tomcat解密中文乱码,在控制台解密中文不是乱码
  19. plc和c语言谁的前景好,PLC面向对象编程和梯形图逻辑,到底谁更实用一些?
  20. 浅谈zookeeper

热门文章

  1. 沁春奶咖告诉您丝袜奶茶在家里可以这样做哦!
  2. 根据pdf模板生成新的pdf文件(Java)
  3. 2019 年(G 题)双路语音同传的无线收发系统
  4. 分享一个Symbian手机防盗软件源码
  5. 百度、阿里、滴滴、新浪的面试心经总结,一线互联网公司面经总结
  6. 【模板】康拓展开+逆康拓展开
  7. 攒机笔记二十五:台式机电脑新增内存条
  8. oracle命令 2,oracle里的常用命令2
  9. Winner(翻译)
  10. 数据治理 - TextFile格式Hive表压缩优化实践