2010-02-17 60 views
1

什麼是隻能找到可路由的IPv4地址的正則表達式? EG,不符合192.0.2.1/24,127.0.0.1等Google似乎只能找到所有太常見的'是一個ip地址'的正則表達式。只適用於IPv4的正則表達式僅適用於可路由地址

+1

這聽起來不像是一個明顯的正則表達式用例。任何理由你*有*使用正則表達式來做到這一點? –

+0

我認爲這是最好的方式,但是從Anon。的回答中我認爲現在有更好的辦法。 – Zombies

回答

3

試圖在正則表達式中實現業務規則是一個壞主意。

只解析IP地址,並檢查它是否滿足您的代碼標準。

0

無論如何你都無法在正則表達式中做到這一點,效率不高。解析它,然後檢查特殊地址(多播,RFC 1918等)。

0

試試這個:

^([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(?<!172\.(16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31))(?<!127)(?<!^10)(?<!^0)\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(?<!192\.168)(?<!172\.(16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31))\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(?<!\.0$)(?<!\.255$)$ 

它正確地不匹配這個無效的IPS:

999.999.999.999. 
108.0.0.01 
0.1.2.3 
00.0000.00.00 
192.168.1.1 
912.456.123.123 
.3.3.3.0 
3.2.2.0 
192.168.0.0 
18.16.0.0 

不匹配本地IP地址:

172.16.0.9 
172.16.4.1 
172.17.1.1 
127.0.0.2 
10.0.1.5 
10.0.0.1 
10.155.155.155 
10.255.255.254 
172.16.0.4 
172.16.0.1 
172.17.1.1 
172.31.254.254 

最後它不符廣播IP地址:

60.123.247.255 
196.168.255.255 
10.255.255.255 
192.168.255.255 

每隔IP我測試過的是一場比賽,到目前爲止,但我還沒有徹底完成,所以可能會有一些錯誤。

相關問題