...

.... Powered by Blogger.

金曜日, 2月 08, 2008

IPアドレスに正確にマッチする正規表現


 IPアドレスを検索するときに良く正規表現を利用しますが、正しくマッチさせる表現が欲しくて作りました。
((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]{0,1}[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]{0,1}[0-9])
と言っても、これも誤った範囲にマッチする可能性があります。例えば”256.0.0.256”と言う文字列があった場合。このパターンでは”56.0.0.25”の範囲にマッチしてしまいます。

 しかしこれは余り大きな問題ではありません。通常、抽出したいIPアドレスの前後には、空白, カンマ, コロン, セミコロンなどの区切り文字があります。実際のログなどからIPアドレスを収集したりする場合には、区切り文字部分も含めてマッチする条件に変更すれば、変なマッチを避けることができます。

 さて、この正規表現ですが長いだけで難しくはありませんが、正規表現が苦手な人の為に簡単に解説します。

 IPアドレスの1オクテットの範囲は、0~255です。これをマッチさせる条件が、”25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]{0,1}[0-9]”です。長いですが大したものではありませんので、1つずつに分解すると以下の4種類に集約されます。
 250 - 255 : 25[0-5]
 200 - 249 : 2[0-4][0-9]
 100 - 199 : 1[0-9]{2}
  0 - 99 : [1-9]{0,1}[0-9]

 これをORで結合して数値部分の条件は完成です。後は、ピリオドなどの条件を加えて上記表現が完成です。