【问题标题】:Regex matching IP正则表达式匹配 IP
【发布时间】:2012-09-06 05:11:21
【问题描述】:

在 C# 中,给定一个格式如下的字符串:

http://10.242.33.210:5000

ftp://52.42.12.52:7000/

如何使用正则表达式仅检索 IP(应丢弃端口)

对于以上两个例子,正则表达式应该匹配 10.242.33.210 和 52.42.12.52

【问题讨论】:

标签: c# .net regex string


【解决方案1】:

您可以创建 Uri 并获取其 Host 属性,而不是正则表达式

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

【讨论】:

  • 这个返回IP地址?丢弃端口?真的??哇。
  • @l46kok,是的,您也可以单独获取其他信息。
【解决方案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

【讨论】:

  • 嗯,一个 second 匹配将匹配端口,是的。但是字符串中的第一个匹配项应该始终是 IP。见上面的例子。
【解决方案3】:
\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

【讨论】:

  • \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b --- 一样短
  • 甚至\b\d{1,3}(\.\d{1,3}){3}\b
猜你喜欢
  • 1970-01-01
  • 2012-04-27
  • 2013-07-14
  • 1970-01-01
  • 2012-05-17
  • 2011-08-17
  • 2014-02-05
  • 2011-08-27
  • 1970-01-01
相关资源
最近更新 更多