Emacs で正規表現を使うなら re-builder を使おう

Emacs正規表現を使うならば re-builder を使うことをおすすめします。


例えば、正規表現を良く使うシチュエーションとして置換があります。

M-x replace-regexp

で置換対象文字列を正規表現で指定し、何に置換して欲しいかを指定するわけです。


行頭に // を追加してソースをコメントアウトしたいのであれば

M-x replace-regexp
Replace regexp: ^ ← ^ を入力
Replace regexp ^ with: // ← // を入力

のように置換をします。(この場合は、comment-region が最適解ですが)


例に挙げたような簡単な正規表現であれば、間違いようもなく問題ないのですが、ちょっと複雑な置換になると話は変わります。
以下のようなコードがあるとしましょう。

byte* buf = new byte[32];
unsigned int bytesPerSector = bitPerSector / 8;


このコードでは、byte という型を使っているのですが、移植性の観点から

  • byte => uint8_t

と置換する必要が出てきたとします。


つまり

uint8_t* buf = new uint8_t[32];
unsigned int bytesPerSector = bitPerSector / 8;

となって欲しいわけです。
間違っても

  • bytesPerSector => uint8_tsPerSector

なんて事態は避けたいですね。*1


そこで正規表現で置換をすると思うのですが、すぐに正規表現が浮かぶでしょうか?
これくらいなら全然余裕で浮かぶ人も多いと思うのですが、できれば正規表現を試行錯誤しながら作りたいと思うのが人情です。
replace-regexp に引数を渡してみたら、「マッチしすぎた」「マッチしなかった」なんてのは悲しいいです><。


そこで re-buidler の出番です。
対象のソースコードのバッファを開いて M-x re-builder と実行して下さい。
実行すると正規表現の入力を求められます。
b y t e と順々に入力していくとリアルタイムにマッチする部分がハイライトされていきます。



これではマッチしすぎていますので正規表現を修正しましょう。




これで良さそうです。
あとは replace-regexp にこの正規表現を指定してやればお望みの置換は完了です。


このように re-builder は正規表現を入力しながらリアルタイムでマッチする場所を知ることができるのです。
re-builder を利用すれば、複雑な正規表現を試行錯誤しながら構築できるので、無駄な手間を減らせるということになります。
便利なのでぜひ使ってみて下さい。

*1:某プロジェクトは過去にこの失敗をしています