日々常々

ふつうのプログラマがあたりまえにしたいこと。

どう書くか迷う正規表現

1文字かつ2種類の文字にマッチさせる正規表現を書こうとする時、 [ab](a|b) で毎回迷ってるなーとアンケートとってみた。

[ab] が優勢。迷ってると言っても深刻なものじゃなく、書こうとしてから [( かどっちを先に打つか指運に任せてる間に入るノイズ程度のものですが。

私の中のそれぞれの主張

指が勝手に打つまでに私の中のそれぞれの派閥がどういう主張をしているかを書いてみる。

[ab] 派の主張

記述が少なくて済むから効率的。文字数が少ないから読みやすい。数が増えても足すだけでいい。キャプチャしたいわけじゃないのに () を使うのは変。 () が入っているとそれを使っている箇所を探すことになる。() にマッチさせたいことは多いので、なるべく使いたくない。

(a|b) 派の主張

orなんだから | を使いたい。キャプチャされるのは別に大した問題にならない。[ab] だとぱっと見 ab の2文字に見える。 () で囲んでる部分が可変なのがわかりやすい。

現在の選択

どうも (a|b) を使うことが多い。

たぶん指は or 感を出したいんだと思う。

迷わないパターン

2文字以上なら (ab|cd) になります。 [ac][bd] とか書くと意味が変わるから当然。これは3種類以上でも。

1文字で3種類以上なら [abc] あるいは [a-c] にする。 (a|b|c) は面倒だし読みにくいから。と書いてみたけど、後者を書くこともないとは言えない。さすがに [abcdefghijklmnopqrstuvwxyz] とは書かないし、4種類以上を (a|b|c|d|e) とか書くことはないと思う。飛び飛びの1文字複数種類だったら [irof] とか並べるしかないと思うけど、そういうのを書かなきゃいけない状態は心当たりがない。

結論

どっちでもいいや。