2012-09-06 77 views
1

在C#中,鑑於格式的字符串是這樣的:正則表達式匹配IP

http://10.242.33.210:5000 

ftp://52.42.12.52:7000/ 

我如何使用正則表達式來僅檢索IP(端口應丟棄)

對於上述兩個例子,正則表達式應該匹配10.242.33.210和52.42.12.52

+0

可能的dupl [對於IP地址的正則表達式](http://stackoverflow.com/questions/4890789/regex-for-an-ip-address) – tripleee

回答

3

代替正則表達式,你可以創建一個Uri並獲取其Host財產

Uri url = new Uri("ftp://52.42.12.52:7000/"); 
Console.Write(url.Host); 
+0

這將返回IP地址?丟棄端口?真??哇。 – l46kok

+0

@ l46kok,是的,你也可以分別獲得其他信息。 – Habib

2

很簡單,實際上是:

[\d.]+ 

無線會匹配一連串的數字和點。在你的情況下,沒有端口的IP地址。通過設法符合IP的外觀(0到255之間的數字,或點之間的一到三個數字),你可以使它更加複雜,但如果你所期望的只是像上面那樣輸入,那麼這應該沒問題。

快速PowerShell的測試:

PS> $tests = 'http://10.242.33.210:5000','ftp://52.42.12.52:7000/' 
PS> $tests | %{ $_ -match '[\d.]+' | Out-Null; $Matches} 

Name       Value 
----       ----- 
0        10.242.33.210 
0        52.42.12.52 
+0

對我來說,這匹配端口,以及... –

+1

那麼,一個*第二個*匹配將匹配端口,是的。但字符串中的第一個匹配應始終是IP。見上面的例子。 – Joey

1
\b([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\b 

相同,但短(從zerkms):

\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b 
+1

'\ b \ d {1,3} \。\ d {1,3} \。\ d {1,3} \。\ d {1,3} \ b' ---同樣較短的 – zerkms

+0

或甚至'\ b \ d {1,3}(\。\ d {1,3}){3} \ b' – zerkms

+0

良好的通話 - 添加到文章。 –