校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > IPV4和IPV6正則表達式的深入講解

IPV4和IPV6正則表達式的深入講解

熱門標簽:百度地圖標注飯店位置怎么 百度地圖標注名編輯 襄陽房產電銷機器人招商 個性化地圖標注在線 施工地圖標注怎么做 怎么在高德地圖標注行走軌跡 清遠陽山400電話號碼如何申請 深圳400電話辦理那家好 安徽移動外呼系統

IPV4正則表達式

Ipv4地址分為ABCDE五大類,其中ABC類是普通ip地址,D類是組播地址,E類保留,作為研究之用。

范圍分別為:

A: 1.0.0.1 ―一126.155.255.255

內網地址范圍:10.0.0.0 一一10-255.255.255

B: 127.0.0.1 —191.255.255.255

內網地址范圍:172.16.0.0——172.31.255.255

C: 192.0.0.1 —223.255.255.255

內網地址范圍:192.168.0.0—一192.168.255.255

D: 224.0.0.1 —239.255.255.255

E: 240.0.0.1 —255.255.255.255

我們的正則要求ip必須是ABC類地址。每個字節的第一個數字可以為0,比如說01, 001。

1.       ip的第一個字節分作以下幾種情況:

1.長度為3且以2開頭,范圍為200-223

正則:22[0-3]丨2[0-1][0-9]

2.長度為3且以0或1開頭

正則:[0-1][0-9][0-9]

3.長度為1或2

正則:([0-9])]{1,2}

所以第一個字節的表達式為:

(22[0-3]丨2[0-1][0-9]|

[0-1][0-9][0-9]|

0[1 -9][0-9]|

([0-9])]{1,2})

2.    后面三個字節范圍為0-255,前面有一個點

分為以下幾種情況:

1.    以2開頭

正則:25[0-5]|2[0-4][0-9]

2.    以1和0開頭的情況和第一個字節相同。

所以,單個字節的正則表達式:

([.]

(25[0-5]|2[0-4][0-9]|

[0-1][0-9][0-9]|

0[1 -9][0-9]|

([0-9])]{1,2}))

3.    加上點號和重復三次,以及開始和結尾匹配符,IPV4最終正則表達式變為:

((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})

點號之所以用中括號括起來是因為如果不擴起來是匹配任意字符。也可以用兩個反斜桿轉義。

加上行首和行尾匹配符:

(^((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})$)

IPV6正則表達式

IPV6介紹

IPV6的長度是128位,相比于ipv4的32位,極大的擴展了ip地址可用空間。ipv4地址現在被視為一種稀缺資源,而ipv6地址相當充足,在可以預見的未來是用不完的。有這樣一段描述:如果地球表面(含陸地和水面)都覆蓋著計算機,那么IPv6允許每平方米擁有7*10A23個IP地址;如果地址分配的速率是每微秒100萬個,那么需要10A19年才能將所有的地址分配完畢。

IPv6地址表示

IPv6的128位地址通常寫成8組,每組為四個十六進制數的形式。比如:

AD80:0000:0000:0000:ABAA:0000:00C2:0002

是一個合法的IPv6地址。這個地址比較長,看起來不方便也不易于書寫。零壓縮法可以用來縮減其長度。如果幾個連續段位的值都是0,那么這些0就可以簡單的以::來表示,上述地址就可寫成:

AD80::ABAA:0000:00C2:0002

這個簡化只能用一次,在上例中的ABAA后面的0000就不能再次簡化。當然也可以在ABAA后面使用::,這樣的話前面的12個0就不能壓縮了。這個限制的目的是為了能準確還原被壓縮的0,不然就無法確定每個::代表了多少個0。例如,下面是一些合法的IPv6地址:

CDCD:910A:2222:5498:8475:1111:3900:2020

1030::C9B4:FF12:48AA:1A2B

2000:0:0:0:0:0:0:1::

0:0:0:0:0:0:12000:0:0:0:0::

同時每個段前面的零可以省略,因此

2001:0DB8:02de::0e13 等價于

2001:DB8:2de::e13

一個IPv6地址可以將一全IPv4地址內嵌進去,寫成IPv6形式和平常習慣的IPv4形式的混合體。

IPv6有兩種內嵌IPv4的方式:IPv4映像地址和IPv4兼容地址(已經被舍棄)。

IPv4映像地址

0000:0000:0000:0000:0000:ffff:192.168.89.9這種混合寫法對應的ipv6地址:

0000:0000:0000:0000:0000:ffff:c0a8:5909

其實表示的是192.168.89.9這個ipv4地址。IPv4映像地址布局如下:

0000…..0000(80bits)| FFFF | IPv4 address |

IPv4兼容地址

兼容地址和映像地址的區別就是第81-96位為0。

IPv4兼容地址布局如下:

0000…..0000(80bits) | 0000 | IPv4 address |

格式分為以下幾種情況:

1.    前面7個完整的字段,第8個字段為零壓縮寫法或者數字。如:

1:2:3:4:5:6:7:8

1:2:3:4:5:6:7::

對應的正則表達式為:

(([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}{1}|:))

最外面加一層括號是為了保證與其他正則表達式拼接到一起時保證不產生混亂。

2.    前面6個完整的字段,后面2個字段可能為零壓縮寫法或者ipv4地址嵌入式寫法。如:

1:2:3:4:5:6::8

1:2:3:4:5:6::

1:2:3:4:5:6:192.168.1.1

對應的正則表達式為:

(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}{1}|((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))

3.    前面5個完整的字段,后面3個字段可能為零壓縮寫法或者ipv4地址嵌入式寫法。如:

1:2:3:4:5::

1:2:3:4:5::6

1:2:3:4:5::8

1:2:3:4:5::192.168.1.1

對應的正則表達式為:

(([0-9A-Fa-f]{1,4}:){5}(:[0-9A-Fa-f]{1,4}{1,2}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))

4.    前面4個完整的字段,后面4個字段可能為零壓縮寫法或者ipv4地址嵌入式寫法。如:

1:2:3:4::

1:2:3:4::5

1:2:3:4::8

1:2:3:4::192.168.1.1

對應的正則表達式為:

(([0-9A-Fa-f]{1,4}:){4}(:[0-9A-Fa-f]{1,4}{1,3}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))

前面3,2,1個完整字段的情況略。

8.    第一個字段即開始簡略寫法

::8

::192.168.1.1

對應的正則表達式為:

(:(:[0-9A-Fa-f]{1,4}{1,7}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))

所以IPV6的正則表達式為:

(([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}{1}|:))|

(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}{1}|((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|

(([0-9A-Fa-f]{1,4}:){5}(:[0-9A-Fa-f]{1,4}{1,2}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|

(([0-9A-Fa-f]{1,4}:){4}(:[0-9A-Fa-f]{1,4}{1,3}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|

(([0-9A-Fa-f]{1,4}:){3}(:[0-9A-Fa-f]{1,4}{1,4}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|

(([0-9A-Fa-f]{1,4}:){2}(:[0-9A-Fa-f]{1,4}{1,5}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|

(([0-9A-Fa-f]{1,4}:){1}(:[0-9A-Fa-f]{1,4}{1,6}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|

(:(:[0-9A-Fa-f]{1,4}{1,7}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))

上面為了表達邏輯的清晰,用了換行符,刪除換行符,便得到IPV6的最終正則表達式:

(([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}{1}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}{1}|((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(:[0-9A-Fa-f]{1,4}{1,2}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(:[0-9A-Fa-f]{1,4}{1,3}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(([0-9A-Fa-f]{1,4}:){3}(:[0-9A-Fa-f]{1,4}{1,4}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(([0-9A-Fa-f]{1,4}:){2}(:[0-9A-Fa-f]{1,4}{1,5}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(([0-9A-Fa-f]{1,4}:){1}(:[0-9A-Fa-f]{1,4}{1,6}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(:(:[0-9A-Fa-f]{1,4}{1,7}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))

加上行首和行尾匹配符:

(^(([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}{1}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}{1}|((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(:[0-9A-Fa-f]{1,4}{1,2}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(:[0-9A-Fa-f]{1,4}{1,3}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(([0-9A-Fa-f]{1,4}:){3}(:[0-9A-Fa-f]{1,4}{1,4}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(([0-9A-Fa-f]{1,4}:){2}(:[0-9A-Fa-f]{1,4}{1,5}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(([0-9A-Fa-f]{1,4}:){1}(:[0-9A-Fa-f]{1,4}{1,6}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(:(:[0-9A-Fa-f]{1,4}{1,7}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))$)

上面的表達式還有考慮的不完善的地方:兼容地址和映射地址的前80bit一定是0,所以上面的范圍其實寫的更寬了,而且使表達式變復雜了。但是發現這個問題的時候,已經沒有優化的需求了,所以就先這樣,有需要的自行進行優化。

HTTPS

正則:

((http|https|HTTP|HTTPS)://.{1,245})

加上行首和行尾匹配符:

(^((http|https|HTTP|HTTPS)://.{1,245})$)

域名

對應的規則:

1.       非最后一段

a.    字符范圍為:a-zA-Z0-9以及短劃線-

b.    開始和結束字符不能為-

c.     長度不超過63

2.       最后一段

a.       字符范圍為a-zA-Z

b.       長度為2-6

3.    不能只有最后一段

正則:

(([a-zA-Z0-9](([a-zA-Z0-9]|[-]){0-61}[a-zA-Z0-9])?[.])+[a-zA-Z0-9]{2,6}

加上行首和行尾匹配符:

(^(([a-zA-Z0-9](([a-zA-Z0-9]|[-]){0-61}[a-zA-Z0-9])?[.])+[a-zA-Z0-9]{2,6}$)

空字符串

(^$)

附IPv4及IPv6正則測試用例——java:

import org.junit.Test;

public class IPv6Test {
 public static final String ipv4Regex = "(^((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})$)";
 public static final String ipv6Regex = "(^(([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}{1}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}{1}|((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(:[0-9A-Fa-f]{1,4}{1,2}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(:[0-9A-Fa-f]{1,4}{1,3}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(([0-9A-Fa-f]{1,4}:){3}(:[0-9A-Fa-f]{1,4}{1,4}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(([0-9A-Fa-f]{1,4}:){2}(:[0-9A-Fa-f]{1,4}{1,5}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(([0-9A-Fa-f]{1,4}:){1}(:[0-9A-Fa-f]{1,4}{1,6}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))|(:(:[0-9A-Fa-f]{1,4}{1,7}|:((22[0-3]丨2[0-1][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|0[1 -9][0-9]|([0-9])]{1,2})){3})|:))$)";
 public static final String httpRegex = "(^((http|https|HTTP|HTTPS)://.{1,245})$)";
 public static final String domainRegex = "(^(([a-zA-Z0-9](([a-zA-Z0-9]|[-]){0-61}[a-zA-Z0-9])?[.])+[a-zA-Z0-9]{2,6}$)";
 public static final String emptyRegex = "(^$)";

 public static final String finalRegex = ipv4Regex + "|" + ipv6Regex + "|" + httpRegex + "|" + domainRegex + "|" + emptyRegex;

 public static void main(String args[]) {
  try {

  } catch (Exception e) {
   e.printStackTrace(System.out);
  }

 }

 // 第一個字段長度為3的測試用例
 @Test
 public void testIpv4_1() {
  assert ("200.255.255.255".matches(finalRegex));
  assert ("223.255.255.255".matches(finalRegex));
  assert ("224.255.255.255".matches(finalRegex));

  assert ("192.0.0.1".matches(finalRegex));
  assert ("127.0.0.1".matches(finalRegex));
  assert ("100.0.0.1".matches(finalRegex));
  assert ("090.0.0.1".matches(finalRegex));
  assert ("009.0.0.1".matches(finalRegex));

 }

 // 第一個字段長度為1或2的測試用例
 @Test
 public void testIpv4_2() {
  assert ("09.255.255.255".matches(finalRegex));
  assert ("90.255.255.255".matches(finalRegex));
  assert ("00.255.255.255".matches(finalRegex));

  assert (!"-.0.0.1".matches(finalRegex));
  assert ("0.0.0.1".matches(finalRegex));
  assert ("1.0.0.1".matches(finalRegex));
 }

 // 測試后面三個字節
 @Test
 public void testIpv4_3() {
  assert ("200.0.255.255".matches(finalRegex));
  assert ("200.01.255.255".matches(finalRegex));
  assert ("200.10.255.255".matches(finalRegex));
  assert (!"200.256.255.255".matches(finalRegex));
  assert ("200.001.255.255".matches(finalRegex));

  assert ("200.255.0.255".matches(finalRegex));
  assert ("200.255.01.255".matches(finalRegex));
  assert ("200.255.10.255".matches(finalRegex));
  assert (!"200.255.256.255".matches(finalRegex));
  assert ("200.255.001.255".matches(finalRegex));

  assert ("200.255.255.0".matches(finalRegex));
  assert ("200.255.255.01".matches(finalRegex));
  assert ("200.255.255.10".matches(finalRegex));
  assert (!"200.255.255.256".matches(finalRegex));
  assert ("200.255.255.001".matches(finalRegex));

 }

 // 測試異常
 @Test
 public void testIpv4_4() {
  assert (!"200".matches(finalRegex));
  assert (!"200.1".matches(finalRegex));
  assert (!"200.1".matches(finalRegex));
  assert (!"200.1.1".matches(finalRegex));
  assert (!"200.1.1.1.1".matches(finalRegex));
 }

 @Test
 public void testIpv6_1() {
  assert ("1:2:3:4:5:6:7::".matches(finalRegex));
  assert ("1:2:3:4:5:6:7:8".matches(finalRegex));

  assert ("1:2:3:4:5:6::".matches(finalRegex));
  assert ("1:2:3:4:5:6::8".matches(finalRegex));

  assert ("1:2:3:4:5::".matches(finalRegex));
  assert ("1:2:3:4:5::8".matches(finalRegex));

  assert ("1:2:3:4::".matches(finalRegex));
  assert ("1:2:3:4::8".matches(finalRegex));

  assert ("1:2:3::".matches(finalRegex));
  assert ("1:2:3::8".matches(finalRegex));

  assert ("1:2::".matches(finalRegex));
  assert ("1:2::8".matches(finalRegex));

  assert ("1::".matches(finalRegex));
  assert ("1::8".matches(finalRegex));

  assert ("::".matches(finalRegex));
  assert ("::8".matches(finalRegex));
  assert ("::7:8".matches(finalRegex));
  assert ("::6:7:8".matches(finalRegex));
  assert ("::5:6:7:8".matches(finalRegex));
  assert ("::4:5:6:7:8".matches(finalRegex));
  assert ("::3:4:5:6:7:8".matches(finalRegex));
  assert ("::2:3:4:5:6:7:8".matches(finalRegex));

  assert ("::192.168.1.1".matches(finalRegex));

 }

 @Test
 public void testIpv6_2() {
  assert ("A:0f:0F:FFFF:5:6:7:8".matches(finalRegex));
  assert (!"A:0f:0F:FFFF1:5:6:7:8".matches(finalRegex));
  assert (!"G:0f:0F:FFFF:5:6:7:8".matches(finalRegex));
 }

 @Test
 public void testHttp() {
  assert ("https://a.com".matches(finalRegex));
  assert ("https://a.b.c.com".matches(finalRegex));
  assert ("https://a".matches(finalRegex));
  assert ("https://a.comdddd".matches(finalRegex));
  assert (!"https://afadfadfadfadfadfadfadfadfadfffffffffffffffffffffffffffffffffffffffffffffffdfadfadfadfadfadfadfadfaafadfadfadfadfadfadfadfadfadfffffffffffffffffffffffffffffffffffffffffffffffdfadfadfadfadfadfadfadfaafadfadfadfadfadfadfadfadfadfffffffffffffffffffffffffffffffffffffffffffffffdfadfadfadfadfadfadfadfa.comdddd"
    .matches(finalRegex));
 }

 @Test
 public void testDomain() {
  assert ("a.com".matches(finalRegex));
  assert ("a.bdfad-dfadf.c.com".matches(finalRegex));
  assert (!"a.-bdfad-dfadf.c.com".matches(finalRegex));
  assert ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWSYZabcdefghijk.com".matches(finalRegex));
  assert (!"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWSYZabcdefghijk1.com".matches(finalRegex));
 }

 @Test
 public void testEmpty() {
  assert ("".matches(finalRegex));
  assert (!"1".matches(finalRegex));

 }
}

到此這篇關于IPV4和IPV6正則表達式的文章就介紹到這了,更多相關IPV4和IPV6正則表達式內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 分析概述IPv6與IPv4的應用與區別

標簽:駐馬店 欽州 黑河 臨夏 延邊 南昌 中衛 阜陽

巨人網絡通訊聲明:本文標題《IPV4和IPV6正則表達式的深入講解》,本文關鍵詞  IPV4,和,IPV6,正則,表達式,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《IPV4和IPV6正則表達式的深入講解》相關的同類信息!
  • 本頁收集關于IPV4和IPV6正則表達式的深入講解的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    蜜桃av一区二区在线观看| 久久精品国内一区二区三区| 2023国产精华国产精品| 成人欧美一区二区三区黑人麻豆| 视频精品一区二区| 91免费视频观看| 精品国产免费视频| 午夜视频一区在线观看| 色老汉av一区二区三区| 国产欧美一二三区| 国产一区二区按摩在线观看| 91精品欧美一区二区三区综合在| 亚洲人123区| 成人自拍视频在线| 久久女同互慰一区二区三区| 日产欧产美韩系列久久99| 精品视频在线看| 亚洲精品自拍动漫在线| 成人免费黄色大片| 中文字幕av资源一区| 国产精品一品视频| 国产片一区二区| 国产高清一区日本| 欧美国产日本视频| 国产精品1区2区3区| 国产视频一区在线播放| 亚洲国产欧美另类丝袜| 日韩中文字幕亚洲一区二区va在线| 波多野结衣精品在线| 国产欧美一区二区三区在线老狼 | 在线日韩av片| 国产精品盗摄一区二区三区| 粉嫩嫩av羞羞动漫久久久| 久久久久久99久久久精品网站| 久久国产麻豆精品| 日韩一卡二卡三卡四卡| 麻豆精品在线播放| 久久伊人蜜桃av一区二区| 国产一区二区美女| 国产精品丝袜一区| 99re这里只有精品首页| 亚洲激情欧美激情| 欧美久久一二区| 久久精品久久精品| 国产精品视频在线看| 97久久精品人人做人人爽50路 | 99精品欧美一区二区蜜桃免费| 国产精品福利在线播放| jlzzjlzz国产精品久久| 亚洲精品乱码久久久久久黑人| 91高清在线观看| 水野朝阳av一区二区三区| 欧美videossexotv100| 国产精品中文有码| 日韩理论电影院| 欧美伦理电影网| 国产永久精品大片wwwapp| 国产精品系列在线| 欧美午夜不卡在线观看免费| 麻豆91免费看| 日韩毛片在线免费观看| 3d动漫精品啪啪一区二区竹菊| 久草精品在线观看| 国产精品传媒视频| 日韩欧美国产wwwww| 成人激情校园春色| 成人一级黄色片| 亚洲国产欧美另类丝袜| 欧美tickle裸体挠脚心vk| 91在线视频官网| 久久99最新地址| 亚洲精品乱码久久久久久久久| 日韩午夜激情视频| 色综合视频在线观看| 狠狠色伊人亚洲综合成人| 亚洲欧美激情一区二区| 亚洲精品一区二区三区99| 99在线精品一区二区三区| 久久电影网电视剧免费观看| **欧美大码日韩| 久久夜色精品国产噜噜av | 激情另类小说区图片区视频区| 国产欧美一区二区精品性色超碰 | 久久综合九色综合97婷婷女人| 91视频免费播放| 国产精品资源站在线| 天涯成人国产亚洲精品一区av| 精品国产伦一区二区三区观看方式 | 亚洲精品v日韩精品| 久久婷婷国产综合国色天香| 欧美日韩成人在线| 91丨porny丨国产入口| 国产精品影视在线| 蜜乳av一区二区| 图片区小说区区亚洲影院| 亚洲视频综合在线| 中文字幕精品三区| 国产性色一区二区| 欧美电影免费观看完整版| 欧美日韩国产123区| 在线视频欧美区| 91女人视频在线观看| 国产999精品久久久久久绿帽| 日韩国产在线观看一区| 亚洲午夜电影在线| 亚洲一区二区三区四区在线| **性色生活片久久毛片| 国产精品久久久久久亚洲伦| 久久精品男人天堂av| 精品国产污污免费网站入口| 91麻豆精品国产| 91精品国产综合久久精品图片| 欧美午夜精品免费| 欧美日韩色一区| 欧美夫妻性生活| 日韩一区二区免费电影| 在线综合视频播放| 91精品国产综合久久久久久久久久| 欧美性猛交xxxxxxxx| 在线电影院国产精品| 欧美一级黄色片| 欧美成人a在线| 久久综合色综合88| 国产精品久久网站| 一区二区三区蜜桃网| 亚洲国产美女搞黄色| 日韩精品免费专区| 国产一区二区三区av电影 | 国产肉丝袜一区二区| 国产精品乱码一区二区三区软件 | 男女视频一区二区| 国产一区二三区好的| 成人午夜视频福利| 色av成人天堂桃色av| 91精品麻豆日日躁夜夜躁| 精品国产第一区二区三区观看体验| 亚洲精品一区二区三区四区高清| 欧美极品美女视频| 亚洲男人天堂一区| 午夜欧美视频在线观看| 国产毛片精品国产一区二区三区| 成人黄页毛片网站| 欧美日韩小视频| 国产拍欧美日韩视频二区| 日韩伦理电影网| 蜜臀精品一区二区三区在线观看| 国产美女在线观看一区| 色国产精品一区在线观看| 精品少妇一区二区三区免费观看 | 欧美激情资源网| 亚洲国产美女搞黄色| 精品亚洲aⅴ乱码一区二区三区| 99久久精品国产导航| 欧美喷水一区二区| 国产欧美日韩在线视频| 亚洲欧美日韩国产另类专区| 美女视频网站久久| 色综合久久久久久久久久久| 日韩欧美卡一卡二| 亚洲欧美成aⅴ人在线观看| 狠狠色伊人亚洲综合成人| 欧美日韩中文一区| 国产精品美女久久久久久久久久久| 日韩中文字幕区一区有砖一区 | 亚洲精品国产高清久久伦理二区| 蜜桃一区二区三区四区| 99久久综合色| 国产色一区二区| 久久精品国产在热久久| 欧美性猛片xxxx免费看久爱| 国产日本一区二区| 奇米四色…亚洲| 色老汉av一区二区三区| 国产精品久久看| 黄色日韩三级电影| 日韩欧美中文字幕一区| 亚洲成av人片在www色猫咪| 成人午夜免费av| 久久精品网站免费观看| 免费在线看一区| 欧美日韩国产乱码电影| 亚洲色图欧洲色图| 福利一区福利二区| 久久久久久久综合| 美女在线视频一区| 日韩亚洲欧美中文三级| 午夜欧美视频在线观看| 欧美性猛交一区二区三区精品| 国产精品国产三级国产a | 国产主播一区二区| 欧美一区二区日韩一区二区| 亚洲在线视频一区| 在线视频国内一区二区| 一区二区三区四区不卡视频| 成人aa视频在线观看| 亚洲欧美在线视频| 99re成人在线| 一区二区三区在线观看动漫| 91麻豆国产精品久久| 亚洲自拍偷拍麻豆|