諸事情あって正規表現について調べていたところ、どうやら正規表現を作成してくれる『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])
使うことがあるかはわからないけど、まぁ、全くの役に立たないってことは無いんじゃなかろうか。