2009-07-07 110 views

回答

10

如果只是從IP提取的數字,而不是驗證IP地址,那麼你可能只是這樣做:

[0-9] 

不過,我認爲一個簡單的String.Split(".")將是一個更容易的選擇。

4
/(\d+)\.(\d+)\.(\d+)\.(\d+)/ 
+0

從上面你的正則表達式分析器應該返回參數1,2,3和4然後可以分開處理。 – Lazarus 2009-07-07 15:27:28

+1

請注意,這不會驗證IP地址(它會接受111111111111.1.000000000000.1234567890),但您並未要求這樣做,所以它可能沒問題! – butterchicken 2009-07-07 15:27:49

+0

每個括號部分 '()' 從正則表達式 – Lazarus 2009-07-07 15:28:05

6

([0-9] +)。([0-9] +)。([0-9] +)。([0-9] +)

...應該這樣做。但它不驗證正則表達式,允許每個部分的數字超過255。

這裏的一個瘋狂的驗證之一:

\ B(25 [0-5] | 2 [0-4] [0-9] | [01] [0-9] - [O-? 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]?)\ b

通過RegexBuddy製造商獲得最後一個正則表達式。

7

一些非常簡單卻又醜陋的東西可以工作..給你四個組,每個八位組一個。

(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}) 
1

雖然其他人指出各種良好的正則表達式;請問爲什麼你絕對必須使用正則表達式?這將是緩慢和容易出錯的。大多數平臺都具有集成的IP地址功能,或提供撥打inet_aton的方法。

1

萬一有人需要一個驗證的正則表達式(所有可能的)IPv4地址:

([^\d.]|^)([01]{0,1}\d{1,2}|2[0-5][0-5])[.]([01]{0,1}\d{1,2}|2[0-5][0-5])[.]([01]{0,1}\d{1,2}|2[0-5][0-5])[.]([01]{0,1}\d{1,2}|2[0-5][0-5])([^\d]|$) 

的IP被包含在第2,第3和第4個參數。第一個和最後一個沒有使用。這些都是必要的,否則一個錯誤的IP如:

999.1.2.3 

將被捕獲爲「99.1.2.3」。我不確定是否要讓IP以點結束,例如

1.2.3.4. 

如果沒有,更改最後一部分([^ \ d] | $)。儘管如此,我不會在它前面留下任何點。

我仍然認爲這RegEx是一個混亂的怪物:)和更好的解決方案將是使用函數手動驗證。