web-dev-qa-db-ja.com

IPアドレスの正規表現

次のソースコードを使用してwan_ipの値(IPアドレス)を抽出しようとしています。 RegExパターンが正しいと確信しています。

String input = @"var product_pic_fn=;var firmware_ver='20.02.024';var wan_ip='92.75.120.206';if (parent.location.href != window.location.href)";
Regex ip = new Regex(@"[\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b");
string[] result = ip.Split(input);

foreach (string bla in result)  
{
  Console.WriteLine(bla);                
}

Console.Read();
38
h0scHberT

_[_は、パターンの先頭にあるべきではありません。また、おそらくMatches(...)を使用したいでしょう。

試してください:

_String input = @"var product_pic_fn=;var firmware_ver='20.02.024';var wan_ip='92.75.120.206';if (parent.location.href != window.location.href)";
Regex ip = new Regex(@"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b");
MatchCollection result = ip.Matches(input);
Console.WriteLine(result[0]); 
_
45
Bart Kiers

非常に古い投稿、受け入れられたソリューションを使用する必要がありますが、IPV4アドレスに適切な正規表現を使用することを検討してください。

((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(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]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
33
JPBlanc

これを試して:

 Match match = Regex.Match(input, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}");
 if (match.Success)
 {
     Console.WriteLine(match.Value);
 }
15
SwDevMan81

特定の正規表現を探している場合、 http://regexlib.com/ にはライブラリ形式のRegExがたくさんあります。

5
Justin Jones

正しいIPのみをチェックする場合は、IPAddress.TryParseを使用します

using System.Net;

bool isIP(string Host)
{
    IPAddress ip;
    return IPAddress.TryParse(Host, out ip);
}
4
Geograph
Regex.IsMatch(input, @"^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$")
3
Manish

/bの使用を避けます-IPの前後に文字を許可します
たとえば、...198.192.168.12...は有効でした。

入力をIPアドレスを分離するチャンクに分割できる場合は、代わりに^および$を使用します。

     Regex regexIP = new Regex(@"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$");

     if (regexIP.Match(textBoxIP.Text).Success){
         String myIP = textBoxIP.Text;
     }

は、172。316。254.1が真であったように、数字を検証しません。これは正しいフォーマットのみをチェックします。


更新:FORMATTINGとVALUESを検証するために使用できます

     Regex regexIP = new Regex(@"^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$");

     if (regexIP.Match(textBoxIP.Text).Success){
         String myIP = textBoxIP.Text;
     }

(各数値に([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])を使用することに注意してください)
クレジット: https://stackoverflow.com/a/10682785/4480932

2
Cordell

私はこの投稿が新しいものではないことを知っていますが、提案されたソリューションのいくつかを試しましたが、どれもジャスティン・ジョーンズが提供したリンクのおかげでうまく機能しませんでした。 IPアドレスにはかなりの数がありますが、これがリストのトップであり、LinqPad(I LOVE LinqPad)を使用すると、私が投げたほとんどのテストは非常にうまく機能します。以前に提供された式のいずれよりも、これを利用することをお勧めします。

^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$

次のようにLinqPadでそのショットを与えます。

// \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b  355.168.0.1 = 355.168.0.1 (Not Correct)
// ((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) 355.168.0.1 = 55.168.0.1 (Not correct)
// \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}  355.168.0.1 = 355.168.0.1 (Not Correct)
// ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$  355.168.0.1 = 355.168.0.1 (Not Correct)
// ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$  355.168.0.1 = 355.168.0.1 (Not Correct)
// ^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$  355.168.0.1 = No Match (Correct)

Match match = Regex.Match("355.168.0.1", @"^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$");
if (match.Success) {
    Console.WriteLine(match.Value);
}
else {
    Console.WriteLine("No match.");
}

新しいRegExでは、これは正しくありません。これは正しいです。355.168.0.1=コメントに記載されているとおり、一致なし。

この表現を利用するツールの開発に取り組んでおり、これを行うためのより良い方法を常に探しているため、これに対する微調整を歓迎します。

[〜#〜] update [〜#〜]:.NET Fiddle提供するプロジェクトを作成しましたさまざまな値をテストするIPアドレスのリストとともに、この式の実際の例。自由に操作して、さまざまな値を試してこの式を実行し、式が失敗するケースを見つけた場合に入力を提供してください。 https://dotnetfiddle.net/JoBXdI

UPDATE 2:まだこの記事を参照してください: 別の関連する質問

おかげで、これが役立つことを願っています!

2
Erick Brown

このパターンは rlAttribute.cs から取得しました。 DataAnnotations名前空間で。ご覧のとおり、ソースから元のパターンの一部を取りました。

Regex.IsMatch(input, @"^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-
9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-
9]\d|1\d\d|2[0-4]\d|25[0-5])$");
0
Denis

Regex(@ "\ A\d {1,3}。\ d {1,3}。\ d {1,3}。\ d {1,3}\z")これで試してください

0
Adit Kothari

私はあなたが[-を取り除く必要があると思います-それは浮遊キャラクターですか?

正規表現(@ "[\b\d {1,3}。\ d {1,3}。\ d {1,3}。\ d {1,3}\b")

0
Cade Roux
(\d{1,3}\.){3}(\d{1,3})[^\d\.] 

これをチェックして。完全に動作するはずです

0
asdfgasdfas

無関係なようです [ 正規表現パターンの先頭。

0
Justin Morgan