美文网首页
正则表达式匹配合法网络ip

正则表达式匹配合法网络ip

作者: thepoy | 来源:发表于2019-12-08 17:31 被阅读0次

    1、在写正则表达式前,需要知道什么是合法的网络ip(不识别本地和回路):

    • ip地址由四个数字组成,每个数字之间用"."隔开
    • 第一个数字不能为255,255为广播地址段
    • 第一个数字不能为0,0为本地主机
    • 第一个数字不能为127,127用于回路测试
    • 其他三个数字为0-255之间的数字

    2、写第一个数字的规则

    • 单位数,不能为0 [1-9]
    • 两位数,10-99
      • 单位数和两位数可以合并表示为 [1-9]\d?
    • 三位数
      • 1开头 1[013456789]\d|1\d[012345689]
      • 2开开头
        • 25[0-4]
        • 2[0-4]\d
          所以第一个数字的表达式为:
    [1-9]\d?|1[013456789]\d|1\d[012345689]|2[0-4]\d|25[0-4]
    

    3、其余数字

    同样分为一位数、二位数、三位数

    • 一位数,[0-9]
    • 二位数,[1-9]\d
    • 三位数,1[\d]{2}, 2[0-4]\d, 25[0-5]
    [0-9]|[1-9]\d?|1\d{2}|2[0-4]\d|25[0-5]
    

    4、完整表达式

    需要用?:让每个()内的分组表达式匹配的子字符串不被捕获,否则最终得到的结果将是由若干个字符串组成的元组,而不是ip地址,有兴趣的可以自己测试去掉?:后运行代码

    a = '10.2.2.22'
    result = re.findall(r'^(?:[1-9]\d?|1[013456789]\d|1\d[012345689]|2[0-4]\d|25[0-4])(?:\.(?:[0-9]|[1-9]\d?|1\d{2}|2[0-4]\d|25[0-5])){3}\Z', a)
    print(result)
    # ['10.2.2.22']
    

    相关文章

      网友评论

          本文标题:正则表达式匹配合法网络ip

          本文链接:https://www.haomeiwen.com/subject/qrvmgctx.html