諸事情あって正規表現について調べていたところ、どうやら正規表現を作成してくれる『rgxg』というコマンドがあるようだ。
早速、インストールして使ってみよう。

なお、検証したOSはUbuntu 14.04 LTSを用いている。

1.インストール

まずはインストールから。
以下のコマンドでインストール出来る。

sudo apt-get install rgxg

これでインストールが出来た。

2.実行

さて、それでは実際にコマンドを実行してみよう。
詳細な使い方については、manで見てもらうとして、ここではいくつかの例を抜粋して紹介する。

このrgxgコマンドでは、基本的には以下のようにサブコマンドを指定して正規表現を生成する。

rgxg [alternation,cidr,escape,range] 正規表現にしたい内容
blacknon@BS-PUB-UBUNTU-01:~$ rgxg
Usage: rgxg COMMAND [ARGS]

The available rgxg commands are:
  alternation     Create regex that matches any of the given patterns
  cidr            Create regex that matches all addresses of the given CIDR block
  escape          Escape the given string for use in a regex
  range           Create regex that matches integers in a given range

Type 'rgxg help COMMAND' for help information on a specific command.

Type 'rgxg version' to see the version of rgxg.

細かいオプションはおいといて、それぞれのサブコマンドでの指定方法と出力結果についてを紹介する。

2-1.alternation

alternationは、"指定した条件のどれか"に当てはまる正規表現を生成してくれる。
以下、例。

blacknon@BS-PUB-UBUNTU-01:~$ rgxg alternation aaa bbb
(aaa|bbb)
blacknon@BS-PUB-UBUNTU-01:~$ rgxg alternation aaa baa
(aaa|baa)
blacknon@BS-PUB-UBUNTU-01:~$ rgxg alternation aaa bbb ccc
(aaa|bbb|ccc)

2-2.cidr

cidrはもうそのままで、CIDRで指定した条件でIPアドレスを生成してくれる正規表現を作成してくれる。
地味にIPv4だけではなくIPv6にも対応しているようだ。

blacknon@BS-PUB-UBUNTU-01:~$ rgxg cidr 192.168.1.0/24
192\.168\.1\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])
blacknon@BS-PUB-UBUNTU-01:~$ rgxg cidr 10.0.0.0/22
10\.0\.[0-3]\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])
blacknon@BS-PUB-UBUNTU-01:~$ rgxg cidr -l 2001:db8:aaaa::/64
2001:0?db8:aaaa((:(:[0-9a-f]{1,4}){1,4}|::|:0?0?0?0(:(:[0-9a-f]{1,4}){1,3}|::|:[0-9a-f]{1,4}(:(:[0-9a-f]{1,4}){1,2}|::|:[0-9a-f]{1,4}(::[0-9a-f]{1,4}|::|:[0-9a-f]{1,4}(::|:[0-9a-f]{1,4})))))|(:(:[0-9a-f]{1,4}){0,2}|:0?0?0?0(:(:[0-9a-f]{1,4})?|:[0-9a-f]{1,4}(:|:[0-9a-f]{1,4}))):(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3})

2-3.escape

escapeは、指定した条件でエスケープする必要がある箇所をエスケープして出力してくれるというもの。
もしかしたら、使えるサブコマンドの中で一番実用的なのかもしれない。

blacknon@BS-PUB-UBUNTU-01:~$ rgxg escape '(aaa|bbb)'
\(aaa\|bbb\)
blacknon@BS-PUB-UBUNTU-01:~$ rgxg escape '$((1+2))'
\$\(\(1\+2\)\)

2-4.range

rangeは、指定した範囲を表現する正規表現を出力してくれるというサブコマンド。

blacknon@BS-PUB-UBUNTU-01:~$ rgxg range 1 051
(5[01]|[1-4][0-9]|[1-9])
blacknon@BS-PUB-UBUNTU-01:~$ rgxg range 1001 1051
(105[01]|10[1-4][0-9]|100[1-9])

使うことがあるかはわからないけど、まぁ、全くの役に立たないってことは無いんじゃなかろうか。