次の例で使用している正規表現"\d{1,3}(\.\d{1,3}){3}(/\d{1,2})?"
は、IPアドレス(IPv4)となりうる文字列にマッチします。 この正規表現は、1~3桁の数字(\d{1,3}
)に続けて、ピリオドと1~3桁の数字の組み合わせが三回続き((\.\d{1,3}){3}
)、場合によってはスラッシュと1~2桁の数字が後続する((/\d{1,2})?
)文字列にマッチします。
この正規表現では、IPアドレスとしては不正な値の文字列にもマッチします。 具体的には、\d
を使っているため全角数字にもマッチする、\d{1,3}
には999
などのIPアドレスとしてはありえない数字にもマッチする、^
を使っていないため文字列の途中でもマッチするなど、完全ではない点に注意してください。
正規表現を使って文字列がIPアドレスの形式となっている箇所を含むかどうか判定する
using System;
using System.Text.RegularExpressions;
class Sample {
static void Main()
{
var words = new string[] {
"0.0.0.0/8",
"127.0.0.1",
"192.168.1.1",
"192.168.0.0/16",
"255.255.255.255",
"new IPAddress(\"192.168.1.1\")",
"localhost",
"192.168.000.000",
"192.168.999.999",
"192.168.999.999/99",
"3.141593",
"2010.11.11",
"127.0.0.1",
"192.168.0.10/24",
};
foreach (var word in words) {
Console.Write("{0,-30} ", word);
if (Regex.IsMatch(word, @"\d{1,3}(\.\d{1,3}){3}(/\d{1,2})?"))
Console.WriteLine("O");
else
Console.WriteLine("X");
}
}
}
実行結果
0.0.0.0/8 O 127.0.0.1 O 192.168.1.1 O 192.168.0.0/16 O 255.255.255.255 O new IPAddress("192.168.1.1") O localhost X 192.168.000.000 O 192.168.999.999 O 192.168.999.999/99 O 3.141593 X 2010.11.11 X 127.0.0.1 O 192.168.0.10/24 O