3

我正在尝试对 HTML 页面中的 IP 地址使用正则表达式:

<html>
  <head><title>Current IP Check</title></head>
  <body>Current IP Address: xx.xxx.xxx.xx</body>
</html>

我的 VB.Net 代码目前是这样的:

Using wClient As New WebClient
   ip = wClient.DownloadString("http://checkip.dyndns.org/")
   ip = Regex.Match(ip, "^[+-]?(\d+(\.\d+)?|\.\d+)$", RegexOptions.Singleline).ToString
End Using

然而,最终的结果对于 IP 来说毫无意义。

我只是想得到xx.xxx.xxx.xx

我会做错什么?

4

4 回答 4

7

IP 地址的正则表达式比您概述的要复杂得多。但是没有理由重新发明轮子。请看一下正则表达式示例,这是一个解释一切的例子:

\b(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]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
于 2012-11-14T20:10:42.877 回答
0

IPv4 没有 + 或 - 符号,如果您没有其他类似字符串模式的危险,您实际上可以更简单地做到这一点

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

此外,如果您需要查找 IPv6 地址,那么您可以尝试类似

\b(?:[\dA-F]{1,4}:){1,7}(?:(?::[\dA-F]{1,4}){1,6}|(?:::[\dA-F]{1,4}){1,7}|:|[\dA-F]{1,4})?\b

请注意,这两个都会找到“候选人”,并且不应该用于验证。如果您想使用 RegEx 验证 IPv6,请查看此处

于 2012-11-14T20:21:48.817 回答
0

对于这样简单的 html,您可以只使用 strings.split:

Dim source As String = wClient.DownloadString("http://checkip.dyndns.org/")
Dim ip As String = Split(Split(source, "Current IP Address:")(1), "</body>")(0).Trim()
于 2012-11-14T22:24:44.567 回答
0

由于@Neolisk 的答案在大多数情况下都有效,因此我对其进行编辑以接受前导零的数字:

\b(0*(25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(0*(25[0-5]|2[0-4]\d|[01]?\d\d?))\b

接受一些IP,如000010.10.10.000001

于 2015-07-24T11:08:52.263 回答