能够识别六代IP(IPV6)的正则表达式

9 篇文章 0 订阅
8 篇文章 0 订阅
((?:[\da-fA-F]{0,4}:[\da-fA-F]{0,4}){2,7})(?:[\/\\%](\d{1,3}))?

如图可以取得任意格式的IPV6地址以及前缀长度。

在这里插入图片描述
虽然可以捕获正确合法的六代地址以及前缀长度,但还是存在一些问题,比如连续出现三但是个冒号或者多次出现“::”的非法地址也会被识别到。不过用来提取地址是完全够用的。

目前除了连续出现三但是个冒号或者多次出现“::”会误识别以外,没有发现以他问题,如有改进建议欢迎指点。

# coding=utf8
# 上述标签定义了本文档的编码,与Python 2.x兼容。
import re
regex = r"((?:[\da-fA-F]{0,4}:[\da-fA-F]{0,4}){2,7})(?:[\/\\%](\d{1,3}))?"

test_str = ("一、冒分十六进制表示法\n"
	"格式为X:X:X:X:X:X:X:X,其中每个X表示地址中的16b,以十六进制表示,例如:\n"
	"ABCD:EF01:2345:6789:ABCD:EF01:2345:6789%21\n"
	"这种表示法中,每个X的前导0是可以省略的,例如:\n"
	"2001:0DB8:0000:0023:0008:0800:200C:417A→ 2001:DB8:0:23:8:800:200C:417A\n"
	"二、0位压缩表示法\n"
	"在某些情况下,一个IPv6地址中间可能包含很长的一段0,可以把连续的一段0压缩为“::”。但为保证地址解析的唯一性,地址中”::”只能出现一次,例如:\n"
	"FF01:0:0:0:0:0:0:1101 → FF01::1101\n"
	"0:0:0:0:0:0:0:1 → ::1\n"
	"0:0:0:0:0:0:0:0 → ::\n\n"
	"二、本地单播地址:\n"
	"链路本地地址和唯一本地地址都属于本地单播地址,在IPv6中,本地单播地址就是指本地网络使用的单播地址,也就是IPV4地址中局域网专用地址。每个接口上至少要有一个链路本地单播地址,另外还可分配任何类型(单播、任播和组播)或范围的IPv6地址。\n"
	"(1)链路本地地址(FE80::/10):仅用于单个链路(链路层不能跨VLAN),不能在不同子网中路由。结点使用链路本地地址与同一个链路上的相邻结点进行通信。例如,在没有路由器的单链路IPv6网络上,主机使用链路本地地址与该链路上的其他主机进行通信。\n"
	"(2)唯一本地地址(FC00::/7):唯一本地地址是本地全局的,它应用于本地通信,但不通过Internet路由,将其范围限制为组织的边界。\n"
	"(3)站点本地地址(FEC0::/10,新标准中已被唯一本地地址代替)\n"
	"三、兼容性地址:在IPv6的转换机制中还包括了一种通过IPv4路由接口以隧道方式动态传递IPv6包的技术。这样的IPv6结点会被分配一个在低32位中带有全球IPv4单播地址的IPv6全局单播地址。另有一种嵌入IPv4的IPv6地址,用于局域网内部,这类地址用于把IPv4结点当作IPv6结点。此外,还有一种称为“6to4”的IPv6地址,用于在两个通过Internet同时运行IPv4和IPv6的结点之间进行通信。\n"
	"四、特殊地址:包括未指定地址和环回地址。未指定地址(0:0:0:0:0:0:0:0或::)仅用于表示某个地址不存在。它等价于IPv4未指定地址0.0.0.0。未指定地址通常被用做尝试验证暂定地址唯一性数据包的源地址,并且永远不会指派给某个接口或被用做目标地址。环回地址(0:0:0:0:0:0:0:1或::1)用于标识环回接口,允许节点将数据包发送给自己。它等价于IPv4环回地址127.0.0.1。发送到环回地址的数据包永远不会发送给某个链接,也永远不会通过IPv6路由器转发 [12]  \n\n\n"
	"Windows IP 配置\n\n\n"
	"以太网适配器 以太网 2:\n\n"
	"   媒体状态  . . . . . . . . . . . . : 媒体已断开连接\n"
	"   连接特定的 DNS 后缀 . . . . . . . :\n\n"
	"以太网适配器 以太网:\n\n"
	"   连接特定的 DNS 后缀 . . . . . . . :\n"
	"   本地链接 IPv6 地址. . . . . . . . : fe80::4d0a:dfc4:11ed:d7ab%18\n"
	"   IPv4 地址 . . . . . . . . . . . . : 192.168.31.102\n"
	"   子网掩码  . . . . . . . . . . . . : 255.255.255.0\n"
	"   默认网关. . . . . . . . . . . . . : 192.168.31.1\n\n\n\n"
	"   连接特定的 DNS 后缀 . . . . . . . :\n"
	"   本地链接 IPv6 地址. . . . . . . . : fe80::717d:ac8a:38e5:9a7%11\n"
	"   IPv4 地址 . . . . . . . . . . . . : 192.168.211.1\n"
	"   子网掩码  . . . . . . . . . . . . : 255.255.255.0\n"
	"   默认网关. . . . . . . . . . . . . :\n\n"
	"以太网适配器 VMware Network Adapter VMnet8:\n\n"
	"   连接特定的 DNS 后缀 . . . . . . . :\n"
	"   本地链接 IPv6 地址. . . . . . . . : fe80::c6c:b135:4a1e:2112%21\n"
	"   IPv4 地址 . . . . . . . . . . . . : 192.168.13.1\n"
	"   子网掩码  . . . . . . . . . . . . : 255.255.255.0\n"
	"   默认网关. . . . . . . . . . . . . :\n\n"
	"以太网适配器 蓝牙网络连接:\n\n"
	"   媒体状态  . . . . . . . . . . . . : 媒体已断开连接\n"
	"   连接特定的 DNS 后缀 . . . . . . . :")

matches = re.finditer(regex, test_str, re.MULTILINE)

for matchNum, match in enumerate(matches, start=1):
    
    print ("在{start}-{end}找到匹配{matchNum}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
    
    for groupNum in range(0, len(match.groups())):
        groupNum = groupNum + 1
        
        print ("在{start}-{end}找到组{groupNum}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IPv4校验正则表达式: ``` ^(?:(?:^|\.)(?:2(?:5[0-5]|[0-4]\d)|1?\d{1,2})){4}$ ``` IPv6校验正则表达式: ``` ^(?:(?:(?:(?:(?:(?:[0-9A-Fa-f]{1,4}:){6}|(?=(?:.*[0-9A-Fa-f]){2,})(?=(?:.*[0-9A-Fa-f]:){0,5}:)(([0-9A-Fa-f]{1,4}:){1,5}|:)((:[0-9A-Fa-f]{1,4}){1,5}:|:))((25[0-5]|2[0-4][0-9]|[0-1][0-9]{0,2})\.){3}(25[0-5]|2[0-4][0-9]|[0-1][0-9]{0,2}))|(?:(?:(?:[0-9A-Fa-f]{1,4}:){5}(?:[0-9A-Fa-f]{1,4}))|(?=(?:.*[0-9A-Fa-f]){2,})(?=(?:.*[0-9A-Fa-f]:){0,4}:)(([0-9A-Fa-f]{1,4}:){1,4}|:)((:[0-9A-Fa-f]{1,4}){1,4}|:)(:[0-9A-Fa-f]{1,4}){1,4}|(?:(?:(?:[0-9A-Fa-f]{1,4}:){4}(?:[0-9A-Fa-f]{1,4})){2})|(?=(?:.*[0-9A-Fa-f]){2,})(?=(?:.*[0-9A-Fa-f]:){0,3}:)(([0-9A-Fa-f]{1,4}:){1,3}|:)((:[0-9A-Fa-f]{1,4}){1,3}|:)(:[0-9A-Fa-f]{1,4}){1,4}|(?:(?:(?:[0-9A-Fa-f]{1,4}:){3}(?:[0-9A-Fa-f]{1,4})){3})|(?=(?:.*[0-9A-Fa-f]){2,})(?=(?:.*[0-9A-Fa-f]:){0,2}:)(([0-9A-Fa-f]{1,4}:){1,2}|:)((:[0-9A-Fa-f]{1,4}){1,2}|:)(:[0-9A-Fa-f]{1,4}){1,4}|(?:(?:(?:[0-9A-Fa-f]{1,4}:){2}(?:[0-9A-Fa-f]{1,4})){4})|(?=(?:.*[0-9A-Fa-f]){2,})(?=(?:.*[0-9A-Fa-f]:){0,1}:)([0-9A-Fa-f]{1,4}:|:)((:[0-9A-Fa-f]{1,4}){1,1}|:)(:[0-9A-Fa-f]{1,4}){1,4}|(?:(?:(?:[0-9A-Fa-f]{1,4}:){6})(?:[0-9A-Fa-f]{1,4}|:))|(?:(?:(?:[0-9A-Fa-f]{1,4}:){0,5}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){1,5}|::(?:[0-9A-Fa-f]{1,4}:){1,5}|(?:[0-9A-Fa-f]{1,4}:){1,5}::|(?:[0-9A-Fa-f]{1,4}:){1,5}(?::[0-9A-Fa-f]{1,4}){1,5}|(?:[0-9A-Fa-f]{1,4}:){1,5}(?::[0-9A-Fa-f]{1,4}){0,4}:|[0-9A-Fa-f]{1,4}:(?:(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,2}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){1,5})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,3}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){1,4})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,4}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){1,3})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,5}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){1,2})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,6}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){1})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,7}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}))|(?:::(?:[0-9A-Fa-f]{1,4}:){1,6}|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,6}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){0,1})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,5}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){0,2})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,4}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){0,3})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,3}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){0,4})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,2}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){0,5})|(?:(?:[0-9A-Fa-f]{1,4}:){1}(?::[0-9A-Fa-f]{1,4}){0,6})))(%.+)?$ ``` IP段大小校验正则表达式: ``` ^(?:(?:(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d{1,2}))|(?:(?:(?:(?:[0-9A-Fa-f]{1,4}:){6}|(?=(?:.*[0-9A-Fa-f]){2,})(?=(?:.*[0-9A-Fa-f]:){0,5}:)(([0-9A-Fa-f]{1,4}:){1,5}|:)((:[0-9A-Fa-f]{1,4}){1,5}:|:))((25[0-5]|2[0-4][0-9]|[0-1][0-9]{0,2})\.){3}(25[0-5]|2[0-4][0-9]|[0-1][0-9]{0,2}))|(?:(?:(?:[0-9A-Fa-f]{1,4}:){5}(?:[0-9A-Fa-f]{1,4}))|(?=(?:.*[0-9A-Fa-f]){2,})(?=(?:.*[0-9A-Fa-f]:){0,4}:)(([0-9A-Fa-f]{1,4}:){1,4}|:)((:[0-9A-Fa-f]{1,4}){1,4}|:)(:[0-9A-Fa-f]{1,4}){1,4}|(?:(?:(?:[0-9A-Fa-f]{1,4}:){4}(?:[0-9A-Fa-f]{1,4})){2})|(?=(?:.*[0-9A-Fa-f]){2,})(?=(?:.*[0-9A-Fa-f]:){0,3}:)(([0-9A-Fa-f]{1,4}:){1,3}|:)((:[0-9A-Fa-f]{1,4}){1,3}|:)(:[0-9A-Fa-f]{1,4}){1,4}|(?:(?:(?:[0-9A-Fa-f]{1,4}:){3}(?:[0-9A-Fa-f]{1,4})){3})|(?=(?:.*[0-9A-Fa-f]){2,})(?=(?:.*[0-9A-Fa-f]:){0,2}:)(([0-9A-Fa-f]{1,4}:){1,2}|:)((:[0-9A-Fa-f]{1,4}){1,2}|:)(:[0-9A-Fa-f]{1,4}){1,4}|(?:(?:(?:[0-9A-Fa-f]{1,4}:){2}(?:[0-9A-Fa-f]{1,4})){4})|(?=(?:.*[0-9A-Fa-f]){2,})(?=(?:.*[0-9A-Fa-f]:){0,1}:)([0-9A-Fa-f]{1,4}:|:)((:[0-9A-Fa-f]{1,4}){1,1}|:)(:[0-9A-Fa-f]{1,4}){1,4}|(?:(?:(?:[0-9A-Fa-f]{1,4}:){6})(?:[0-9A-Fa-f]{1,4}|:))|(?:(?:(?:[0-9A-Fa-f]{1,4}:){0,5}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){1,5}|::(?:[0-9A-Fa-f]{1,4}:){1,5}|(?:[0-9A-Fa-f]{1,4}:){1,5}::|(?:[0-9A-Fa-f]{1,4}:){1,5}(?::[0-9A-Fa-f]{1,4}){1,5}|(?:[0-9A-Fa-f]{1,4}:){1,5}(?::[0-9A-Fa-f]{1,4}){0,4}:|[0-9A-Fa-f]{1,4}:(?:(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,2}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){1,5})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,3}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){1,4})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,4}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){1,3})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,5}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){1,2})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,6}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){1})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,7}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}))|(?:::(?:[0-9A-Fa-f]{1,4}:){1,6}|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,6}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){0,1})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,5}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){0,2})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,4}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){0,3})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,3}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){0,4})|(?:(?:(?:[0-9A-Fa-f]{1,4}:){1,2}(?:[0-9A-Fa-f]{1,4})){1}(?::[0-9A-Fa-f]{1,4}){0,5})|(?:(?:[0-9A-Fa-f]{1,4}:){1}(?::[0-9A-Fa-f]{1,4}){0,6}))))(/\d{1,2})?$ ``` 这三个正则表达式可以用于校验IP地址和IP段大小的格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值