はじめに
正規表現
を使って、IPアドレス[IPv4]
(0.0.0.0~255.255.255.255)をより短く書く方法をまとめました。
【結論】正規表現でIPアドレスを短く書く
^(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])$
上記の正規表現では、[0~255.]を3回繰り返した後に[0~255]を付け足すという書き方で、IPアドレス【0~255.0~255.0~255.0~255】にマッチさせています。
正規表現の動作確認の例
上記のサイトでは、正規表現がどんな文字列にマッチするのかを確認できます。上記の正規表現の場合、「0~255の数字と数字の間の.(ドット)」だけが、正規表現にマッチし、「0~255以外の数字」「0以外で先頭に0がついた数字」「最後が.(ドット)の場合」「数字が4つ以上ある場合(例:10.20.30.40.50)」などは、正規表現にマッチしません。
正規表現でIPアドレス(0-255.)を短く書く
^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.$
--✂-- もっと短く --✂--
0の位の『[0-9]』と10の位の『[1-9][0-9]』を ? でまとめる
^([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.$
--✂-- もっと短く --✂--
100の位の『[0-9][0-9]』を {2} でまとめる
^([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.$
--✂-- もっと短く --✂--
『[0-9]』を同じ意味を持つ正規表現『\d』に書き換える
^([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])\.$
正規表現④(37文字)は、正規表現①(53文字)と比べて文字数が16文字短くなりました。
正規表現でIPアドレス(0-255.0-255.0-255.0-255)を短く書く
^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$
--✂-- もっと短く --✂--
0の位の『[0-9]』と10の位の『[1-9][0-9]』を ? でまとめる
^([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$
--✂-- もっと短く --✂--
100の位の『[0-9][0-9]』を {2} でまとめる
^([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
--✂-- もっと短く --✂--
『[0-9]』を同じ意味を持つ正規表現『\d』に書き換える
^([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])$
--✂-- もっと短く --✂--
3回繰り返す『([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])\.』を {3} でまとめる
^(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])$
正規表現⑤(77文字)は、正規表現①(208文字)と比べて文字数が131文字短くなりました。
上記の正規表現でヒットしない文字の例
- 空の場合
- 数字とドット以外の文字
- 0~255以外の数字
- 0以外で先頭に0がついた数字(例:03)
- 最後が.(ドット)の場合
- .(ドット)の数が少なすぎる場合
- .(ドット)の数が多すぎる場合
- 数字が4つ以上ある場合(例:10.20.30.40.50)
正規表現が、どんな文字列にマッチしてどんな文字列にマッチしないのか確認したい場合は、正規表現チェッカー|WWWクリエイターズというサイトが便利です。
関連サイト
正規表現チェッカー|WWWクリエイターズ
https://www-creators.com/tool/regex-checker
今回掲載した正規表現のチェック(確認)に利用。1つの正規表現で、色んな文字列をチェックできる点が便利。これにはヒットするが、あれにはヒットしないというのが一目で分かり安心できる。チェック結果をURLリンクで共有できる点も便利。
正規表現サンプル集|メガソフト株式会社
https://www.megasoft.co.jp/mifes/seiki/meta.html
正規表現構文早見表 - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_expressions/Cheatsheet
正規表現で使われる文字(「?」「{2}」「\d」など)の意味を分かりやすく紹介しているサイト。
(text_sakura)