一、判斷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地址的正則表達式。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/275776.html