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

このような単純な 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

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 に答える