2012-09-06 43 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

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