ipv6正则表达式 关于ipv6的捕获

ipv6正则表达式

这是我学习正则表达式时做的笔记,希望对大家有帮助!是作为捕获一般ipv6地址使用的。

分析ipv6格式

一般的xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx以及他的省略格式xxxx::xxxx
以下内容不包括::A.B.C.D 格式以及::FFFF:A.B.C.D格式

  1. 无省略时
//以下两个不符合规则
1111:2222:3333:4444:5555:6666:7777:
    :2222:3333:4444:5555:6666:7777:8888
//以下符合规则
1111:2222:3333:4444:5555:6666:7777:8888

//捕获无压缩的地址
(([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4})
  1. 存在一个::,则其他的文字相对于冒号分别排列
//以下不符合规则
0000:2222:3333:4444:5555:6666::    
     0000:2222:3333:4444:5555::7777:
          0000:2222:3333:4444::6666:7777:
               0000:2222:3333::5555:6666:7777:
                    0000:2222::4444:5555:6666:7777:
                             ::3333:4444:5555:6666:7777:
    :2222:3333:4444:5555:6666::8888
         :2222:3333:4444:5555::7777:8888
              :2222:3333:4444::6666:7777:8888
                   :2222:3333::5555:6666:7777:8888
                        :2222::4444:5555:6666:7777:8888
                             ::3333:4444:5555:6666:7777:8888

//这里左端和右端都只能省略一次0,因此以下是符合规则的
1111:2222:3333:4444:5555:6666::8888
     1111:2222:3333:4444:5555::7777:8888
          1111:2222:3333:4444::6666:7777:8888
               1111:2222:3333::5555:6666:7777:8888
                    1111:2222::4444:5555:6666:7777:8888
                         1111::3333:4444:5555:6666:7777:8888
                             ::3333:4444:5555:6666:7777:0000
0000:2222:3333:4444:5555:6666::

//::在左端起始,但右端至少有一组地址
(:(:[\da-fA-F]{1,4}){1,6})

//::在右端起始,但左端至少有一组地址
(([\da-fA-F]{1,4}:){1,6}:)

//::非首尾状态,左右都至少有一定的地址,顺便加上单独的::
(([\da-fA-F]{1,4}:){6}(:[\da-fA-F]{1,4}){1,1})
(([\da-fA-F]{1,4}:){5}(:[\da-fA-F]{1,4}){1,2})
(([\da-fA-F]{1,4}:){4}(:[\da-fA-F]{1,4}){1,3})
(([\da-fA-F]{1,4}:){3}(:[\da-fA-F]{1,4}){1,4})
(([\da-fA-F]{1,4}:){2}(:[\da-fA-F]{1,4}){1,5})
(([\da-fA-F]{1,4}:){1}(:[\da-fA-F]{1,4}){1,6})
(::)
  1. ipv6最右边的%xx可以视情况捕获,估计也不常用,我这里就不捕获了。
(%\d{1,2})
  1. 集合1~2有以下的匹配内容
//集合符合条件的类型
(([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4})
(([\da-fA-F]{1,4}:){6}(:[\da-fA-F]{1,4}){1,1})
(([\da-fA-F]{1,4}:){5}(:[\da-fA-F]{1,4}){1,2})
(([\da-fA-F]{1,4}:){4}(:[\da-fA-F]{1,4}){1,3})
(([\da-fA-F]{1,4}:){3}(:[\da-fA-F]{1,4}){1,4})
(([\da-fA-F]{1,4}:){2}(:[\da-fA-F]{1,4}){1,5})
(([\da-fA-F]{1,4}:){1}(:[\da-fA-F]{1,4}){1,6})
(([\da-fA-F]{1,4}:){1,6}:)
(:(:[\da-fA-F]{1,4}){1,6})
(::)
  1. 地址在一段文本的中间时,要注意头尾
//首部限定组,限定从一个非0-F以及:的字符开始或者从起始点开始匹配
((?<=[^\da-fA-F:])|^)

//末尾限定组,限定最后连接的字符是一个非0-F以及:的字符或者文件结束
((?=[^\da-fA-F:])|$)

  1. 用|分隔符连接,并包裹,首尾加上限定组。连接起来变成如下的内容
((?<=[^\da-fA-F:])|^)((([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4})|(([\da-fA-F]{1,4}:){6}(:[\da-fA-F]{1,4}){1,1})|(([\da-fA-F]{1,4}:){5}(:[\da-fA-F]{1,4}){1,2})|(([\da-fA-F]{1,4}:){4}(:[\da-fA-F]{1,4}){1,3})|(([\da-fA-F]{1,4}:){3}(:[\da-fA-F]{1,4}){1,4})|(([\da-fA-F]{1,4}:){2}(:[\da-fA-F]{1,4}){1,5})|(([\da-fA-F]{1,4}:){1}(:[\da-fA-F]{1,4}){1,6})|(([\da-fA-F]{1,4}:){1,6}:)|(:(:[\da-fA-F]{1,4}){1,6})|(::))((?=[^\da-fA-F:])|$)
  1. 有些地方不识别(?<=…)、(?=…)、\d。 \d可以改为0-9
((?<=[^0-9a-fA-F:])|^)((([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4})|(([0-9a-fA-F]{1,4}:){6}(:[0-9a-fA-F]{1,4}){1,1})|(([0-9a-fA-F]{1,4}:){5}(:[0-9a-fA-F]{1,4}){1,2})|(([0-9a-fA-F]{1,4}:){4}(:[0-9a-fA-F]{1,4}){1,3})|(([0-9a-fA-F]{1,4}:){3}(:[0-9a-fA-F]{1,4}){1,4})|(([0-9a-fA-F]{1,4}:){2}(:[0-9a-fA-F]{1,4}){1,5})|(([0-9a-fA-F]{1,4}:){1}(:[0-9a-fA-F]{1,4}){1,6})|(([0-9a-fA-F]{1,4}:){1,6}:)|(:(:[0-9a-fA-F]{1,4}){1,6})|(::))((?=[^0-9a-fA-F:])|$)
  1. 用Regester亲测有效,测试文本如下;
qw122001:0db8:3c4d:0015:0000:0000:1a2f:1a2basdqwr
2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b
IPv6 地址:	240e:471d:d8a9:2164:5d1d:1dba:5931:d7e3
本地链接 IPv6 地址:	fe80::5d1d:1dba:5b41:d6f3%6
IPv6 DNS 服务器:	2400:3200::1
2400:3200:baba::1
IPv4 地址:	192.168.43.222
IPv4 DNS 服务器:	192.168.43.1
fe80:0000:0000:0000:0204:61ff:fe9d:f156 // full form of IPv6 
fe80:0:0:0:204:61ff:fe9d:f156 // drop leading zeroes 
fe80::204:61ff:fe9d:f156 // collapse multiple zeroes to :: in the IPv6 address 
fe80:0000:0000:0000:0204:61ff:254.157.241.86 // IPv4 dotted quad at the end 
fe80:0:0:0:0204:61ff:254.157.241.86 // drop leading zeroes, IPv4 dotted quad at the end 
fe80::204:61ff:254.157.241.86 // dotted quad at the end, multiple zeroes collapsed 

此外,正则表达式匹配这些IPv6形式:

::1 // localhost 
fe80:: // link-local prefix 
2001:: // global unicast prefix 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值