正規表現は万能じゃない
正規表現をスパッと使えると格好いいけど、複雑な正規表現があるコードは引き継いだ人には結構厄介な仕事です。
時々、私が言っていることに「正規表現はチューリング完全でないので全てを表現できる分けではないし、それを読む方の身になって考えてほしい」というのがあります。
#! /usr/bin/gawk -f is_recomend($0 "") { print $0; } # is_recomend - recomended word? (see below) # http://code.nanigac.com/forum/view/249 function is_recomend(str) { if (str ~ /[-a-z0-9]/ && str !~ /--/ &&\ length(str) >=3 && length(str) <= 20) { return str; } else { return 0; } }
そのまま書いただけのコードですが、逆に説明の必要もないでしょう。
「ハイフンか小文字か数字で」「連続したハイフンは禁止で」「長さが 3 文字以上で」「20 文字以下」・・・まんまですが、それでいいと思います。
awk なので、'000' とかだと '0' になってしまうため、関数の引数の段階で文字列化しています。
ちなみに awk (gawk) であれば以下のような表現も使えます。
$ echo 'aiueo' | gawk --re-interval '/^[-a-z0-9]{3,20}$/' aiueo