zoukankan      html  css  js  c++  java
  • 正则匹配IP

    分析

    IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255( 2^8 ),段与段之间用英文句点“.”隔开。例如:某台计算机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:这个可以继续分拆,这样写起来更加简单明了. 
         0-9:    特点:一位数,个位是0~9,用正则表达式可以写成:d 
         10-99:  特点:二位数,十位是1~9,个位是0~9,用正则表达式可以写成:[1-9]d 
         100-199:特点:三位数,百位是1,十位是0~9,个位是0~9,用正则表达式可以写成:1d{2}

     

    再组合

    于是0-99的正则表达式可以合写为[1-9]?d

    那么0-199用正则表达式就可以写成(1d{2})|([1-9]?d)

    这样0~255的正则表达式就可以写成(25[0-5]|2[0-4]d|((1d{2})|([1-9]?d)))

    最后,前面3段加上句点.可以使用{3}重复得到,第4段再来一次同样的匹配,得到IP地址的正则表达式:

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

     

    注意: 

    1.  为什么三位数的匹配放在二位数/一位数的前面?

    因为正则表达式规则之一:最先开始的匹配拥有最高的优先权。

    2.  0.0.0.0和255.255.255.255是合法存在的IP地址,你知道是为什么吗?

    注意这两个IP地址也可以匹配,要单独过滤。

    4.  为什么前面在最前面要有?:呢?它在这里有什么用?

    ?:是不捕获分组的意思,就是()中的内容本来可以在后边用1,2等代替,现在不能了。同时在匹配出的完整代码中也不包含分组。( 详细看?<:哪一篇的解释 )

    
    

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

     
  • 相关阅读:
    hp一體機cartridge error及carriage jam4/22
    指纹仪zkonline.ocx:access violation...4/13
    IIS6:Service Unaviable 9/27
    寶寶的成長腳印3/15
    vs2003不能调试4/8
    C++ 的复制构造函数
    导入与导出数据 大容量复制程序(bcp)
    关于SQlserver数据库的加密应用
    DataGridView使用技巧
    使用C# 向记事本窗口发送消息
  • 原文地址:https://www.cnblogs.com/leezhxing/p/4333769.html
Copyright © 2011-2022 走看看