ZBLOG

请写出匹配ip的Python正则表达式?

匹配 IPv4 的正则表达式如下:

import re

ipv4_regex = r'^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))\.){3}(([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$'

# 测试
ip_list = ['192.168.1.1', '10.0.0.1', '172.16.31.255', '300.100.200.50', '192..1']

for ip in ip_list:
    if re.match(ipv4_regex, ip):
        print(f'{ip} 是合法的 IPv4 地址')
    else:
        print(f'{ip} 不是合法的 IPv4 地址')

匹配 IPv6 的正则表达式如下:

import re

ipv6_regex = r'^(([a-fA-F0-9]{1,4}:){7}[a-fA-F0-9]{1,4}|([a-fA-F0-9]{1,4}:){6}:([a-fA-F0-9]{1,4}:){1,3}|([a-fA-F0-9]{1,4}:){5}:([a-fA-F0-9]{1,4}:){1,4}|([a-fA-F0-9]{1,4}:){4}:([a-fA-F0-9]{1,4}:){1,5}|([a-fA-F0-9]{1,4}:){3}:([a-fA-F0-9]{1,4}:){1,6}|([a-fA-F0-9]{1,4}:){2}:([a-fA-F0-9]{1,4}:){1,7}|[a-fA-F0-9]{1,4}:((:[a-fA-F0-9]{1,4}){1,7}|:)|:((:[a-fA-F0-9]{1,4}){1,7}|:))%?(\d{1,3})?$'

# 测试
ip_list = ['2001:db8:85a3::8a2e:370:7334', '2002:c0a8:101::42', '20010db885a3000000008a2e03707334', '::ffff:c000:280', '::']

for ip in ip_list:
    if re.match(ipv6_regex, ip):
        print(f'{ip} 是合法的 IPv6 地址')
    else:
        print(f'{ip} 不是合法的 IPv6 地址')

其中,ipv6_regex 的正则表达式中有一些比较复杂的部分,需要进行解释:

  • ([a-fA-F0-9]{1,4}:){n} 表示匹配 n 个长度为 1 到 4 的十六进制数,以 : 分隔。
  • [a-fA-F0-9]{1,4}:$ 表示匹配一个长度为 1 到 4 的十六进制数,以 : 结尾。
  • | 表示或者。
  • ([a-fA-F0-9]{1,4}:){m,n} 表示匹配 m 到 n 个长度为 1 到 4 的十六进制数,以 : 分隔。
  • : 表示匹配一个冒号。
  • (:(?:[a-fA-F0-9]{1,4})){0,7} 表示匹配最多 7 个长度为 1 到 4 的十六进制数,以 : 分隔。注意到这里的 ?: 是用来指定一个非捕获组,表示只匹配但不保存匹配结果。
  • %?(\d{1,3})?$ 表示匹配可选的网络接口标识符(以 % 开头),后面紧跟着一个数字。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=697

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?