次の例で使用している正規表現"\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