2013-03-24 140 views
-3

我有以下的正則表達式匹配的IP地址:IP地址的正則表達式允許端口

(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ 

可能有人請更新它允許對端的端口號(端口號是可選)

在此先感謝

回答

0
(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]):[\d]{1,5}$ 
+0

正則表達式*需要*端口。 – Richard 2013-03-24 11:40:27

1

人,這是一個爛攤子。最好簡化搜索模式,然後驗證值,而不是試圖在正則表達式中做所有事情。例如,

private String findIP(String in) { 
    Matcher m = Pattern.compile("((\\d+\\.){3}\\d+):(\\d+)").matcher(in); 
    if (m.find()) { 
    String[] p = m.group(1).split("\\."); 
    for (int i = 0; i < 4; i++) 
     if (Integer.parseInt(p[i]) > 255) return null; 
    if (Integer.parseInt(m.group(3)) > 65535) return null; 
    return m.group(0); 
    } 
    return null; 
} 

我可能沒有考慮到各種考慮(地址從0開始,parseInt函數返回底片等),但有一個簡單的正則表達式不負有心人的可讀性,以及具有數4 ,255和65535是未來讀者的線索,我們正在討論一個虛線的四元組和端口。

+0

+1,但是更好的正則表達式是:「([012]?\ d {1,2})(\\。[012]?\\ d {1,2}){3} d {1,5}))?」 – 2013-03-24 16:43:48

+0

感謝布雷克,我決定使用你的,我不得不做一個小小的改變,使端口可選 (([0-9] | [1-9] [0-9] | 1 [0-9] { 2} | 2 [0-4] [0-9] | 25 [0-5])\){3}([0-9] |。[1-9] [0-9] | 1 - [O- 9] {2} | 2 [0-4] [0-9] | 25 [0-5])(?:[\ d] {1,5})$ – 2013-03-27 17:38:36