次のソースコードを使用して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();
_[
_は、パターンの先頭にあるべきではありません。また、おそらく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]);
_
非常に古い投稿、受け入れられたソリューションを使用する必要がありますが、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]?)$
これを試して:
Match match = Regex.Match(input, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}");
if (match.Success)
{
Console.WriteLine(match.Value);
}
特定の正規表現を探している場合、 http://regexlib.com/ にはライブラリ形式のRegExがたくさんあります。
正しいIPのみをチェックする場合は、IPAddress.TryParseを使用します
using System.Net;
bool isIP(string Host)
{
IPAddress ip;
return IPAddress.TryParse(Host, out ip);
}
Regex.IsMatch(input, @"^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$")
/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
私はこの投稿が新しいものではないことを知っていますが、提案されたソリューションのいくつかを試しましたが、どれもジャスティン・ジョーンズが提供したリンクのおかげでうまく機能しませんでした。 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:まだこの記事を参照してください: 別の関連する質問
おかげで、これが役立つことを願っています!
このパターンは 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])$");
Regex(@ "\ A\d {1,3}。\ d {1,3}。\ d {1,3}。\ d {1,3}\z")これで試してください
私はあなたが[-を取り除く必要があると思います-それは浮遊キャラクターですか?
正規表現(@ "[\b\d {1,3}。\ d {1,3}。\ d {1,3}。\ d {1,3}\b")
(\d{1,3}\.){3}(\d{1,3})[^\d\.]
これをチェックして。完全に動作するはずです
無関係なようです [ 正規表現パターンの先頭。