一、判断IPv4地址的正则表达式
在讨论IPv6正则表达式之前,我们先来回顾一下如何判断IPv4地址的正则表达式。IPv4地址用32位二进制数表示,通常以点分十进制形式展现。其正则表达式为:
^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
上述正则表达式的含义是,以^开头,以$结尾,中间有四个由0-255组成的数字,每个数字之间用点号连接。其中,25[0-5]表示250-255之间的数字,2[0-4][0-9]表示200-249之间的数字,[01]?[0-9][0-9]?表示0-199之间的数字。
二、IPv6地址正则表达式
IPv6地址是128位二进制数表示,常用冒号十六进制形式展现,形如2001:0db8:85a3:0000:0000:8a2e:0370:7334。IPv6地址有以下几种表示方法:
- 完整表示法:128位二进制数,每4个数字以冒号分隔,形如2001:0db8:85a3:0000:0000:8a2e:0370:7334。
- 压缩表示法:用双冒号代替连续的0段,只能使用一次,形如2001:0db8:85a3::8a2e:0370:7334。
- IPv4映射表示法:将IPv4地址嵌入IPv6地址,形如::ffff:192.168.0.1。
IPv6地址的正则表达式非常复杂,可以从多个方面来分析:
三、IPv6地址正则表达式的选取
1. 完整表示法的正则表达式
完整表示法是最常见的IPv6地址形式,在正则表达式中,我们可以采用如下格式:
^[0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4}){7}$
上述正则表达式的含义是,以^开头,以$结尾,中间有8段由0-9a-fA-F组成的数字,每个数字之间用冒号连接,每段数字最多4个字符,最少1个字符。
2. 压缩表示法的正则表达式
在压缩表示法中,用双冒号代替连续的0段。由于双冒号只能使用一次,所以需要分两种情况进行匹配。
# 双冒号在中间 ^([0-9a-fA-F]{1,4}:){6}(:[0-9a-fA-F]{1,4}){0,1}$ # 双冒号在最后一段 ^([0-9a-fA-F]{1,4}:){1,7}:$
上述正则表达式的含义分别是:
- 在双冒号中间,有6段已经规定好的数字,最后一段可以省略。
- 双冒号在最后一段,前面有1~7段已经规定好的数字。
3. IPv4映射表示法的正则表达式
IPv4映射表示法中,将IPv4地址嵌入IPv6地址。其正则表达式如下:
^::ffff:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
上述正则表达式的含义是,以^开头,以$结尾,前面有4个冒号,后面是一个IPv4地址的正则表达式。