さて、前回の記事でIP Address (v4)から余計な頭の0などを正規表現で除外しました。 0+をa+とかにすれば、文字列でも使えるわけで、あれはあれで意味があります。
さて、.NET Frameworkには、[System.Net.IPAddress]があります。 これを使えば楽に変換もできますね。
キャストしてみる
いつものMSDN先生で確認します。 MSDN - IPAddress クラス
では、試してみましょう。
[System.Net.IPAddress]$ip = "10.0.1.1"
取得してみます。
PS> $ip Address : 16842762 AddressFamily : InterNetwork ScopeId : IsIPv6Multicast : False IsIPv6LinkLocal : False IsIPv6SiteLocal : False IsIPv6Teredo : False IsIPv4MappedToIPv6 : False IPAddressToString : 10.0.1.1
ということは、プロパティを絞れば。
PS> $ip.IPAddressToString 10.0.1.1
どんなパターンまでキャストできるか
さて、正規表現と同程度に処理できるでしょうか。
頭に0がついた3桁です。
PS> [System.Net.IPAddress]$ip2 = "192.168.001.001" PS> $ip2.IPAddressToString 192.168.1.1
PS> [System.Net.IPAddress]$ip3 = "192.168.0001.001" PS> $ip3.IPAddressToString 192.168.1.1
頭に0がついた4桁だとキャスト失敗します。
PS> [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の両者を組み合わせればいいのでは。 クラス変換されるのはトテモ美味しいわけで。