次の例で使用している正規表現"\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アドレスの形式となっている箇所を含むかどうか判定する
Imports System
Imports System.Text.RegularExpressions
Class Sample
Shared Sub Main()
Dim words() As String = 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" _
}
For Each word As String 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")
End If
Next
End Sub
End Class
実行結果
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