さて、前回の記事でIP Address (v4)から余計な頭の0などを正規表現で除外しました。
0+をa+とかにすれば、文字列でも使えるわけで、あれはあれで意味があります。
さて、.NET Frameworkには、[System.Net.IPAddress]があります。
これを使えば楽に変換もできますね。
キャストしてみる
いつものMSDN先生で確認します。
MSDN - IPAddress クラス
では、試してみましょう。
[System.Net.IPAddress]$ip = "10.0.1.1"
取得してみます。
$ip
結果です。
Address : 16842762
AddressFamily : InterNetwork
ScopeId :
IsIPv6Multicast : False
IsIPv6LinkLocal : False
IsIPv6SiteLocal : False
IsIPv6Teredo : False
IsIPv4MappedToIPv6 : False
IPAddressToString : 10.0.1.1
ということは、プロパティを絞れば。
$ip.IPAddressToString
とれました。
10.0.1.1
どんなパターンまでキャストできるか
さて、正規表現と同程度に処理できるでしょうか。
頭に0がついた3桁
まずはこれ
[System.Net.IPAddress]$ip2 = "192.168.001.001"
キャストはできましたので取ってみます。
$ip2.IPAddressToString
上手くいきました。
192.168.1.1
次です。
[System.Net.IPAddress]$ip3 = "192.168.0001.001"
キャストはできましたので取ってみます。
$ip3.IPAddressToString
上手くいきました。
192.168.1.1
頭に0がついた4桁
このパターンはどうでしょうか。
[System.Net.IPAddress]$ip4 = "192.0168.0001.001"
キャスト失敗です。
値 "192.0168.0001.001" を型 "System.Net.IPAddress" に変換できません。エラー: "無効な IP アドレスが指定され
ました。"
発生場所 行:27 文字:1
+ [System.Net.IPAddress]$ip4 = "192.0168.0001.001"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : MetadataError: (:) [], ArgumentTransformationMet
adataException
+ FullyQualifiedErrorId : RuntimeException
まとめ
状況次第ですが、正規表現と.NETの両者を組み合わせればいいのでは。
クラス変換されるのはトテモ美味しいわけで。
というか、検証の状況になるのはどうかと思いますが、まぁ事例として?