読者です 読者をやめる 読者になる 読者になる

$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

emacsの正規表現をもっと便利に使う

 emacs正規表現を使って置換したいみたいな要求はそれなりにあると思いますが、それをやろうとするとemacs正規表現のバックスラッシュ地獄みたいなものに遭遇することがよくあります。そんな時に使いたいtipsを少しだけ紹介します。

re-builderを使う

 emacsにはre-builderというものがあって、書いている正規表現のマッチ状況をリアルタイムにプレビューすることが出来るツールが存在します。M-x re-builderして、いろいろ書いてみると現在のマッチ状況がプレビューされます。

f:id:shiba_yu36:20130114151054j:plain

 実行中にC-c C-wすればその正規表現をコピーでき、C-c C-qで終了出来ます。emacsにはいろいろな正規表現syntaxがあるので、C-c C-iで切り替えもできます。
 詳しくは以下の記事を見るとよいでしょう。

foreign-regexpを使う

 re-builderを使ってリアルタイムにプレビュー出来ると言っても、バックスラッシュとか書きまくりたくありません。それよりperlruby正規表現をそのまま使えればもっといいはずです。
 それを解決するためにforeign-regexp.elというものがあります。

設定

まずはインストール。

(install-elisp https://raw.github.com/k-talo/foreign-regexp.el/master/foreign-regexp.el)

その後は以下の様な設定をします。僕はperlをよく使うのでperl正規表現を使います。

(require 'foreign-regexp)

(custom-set-variables
 ;; 正規表現、perlかrubyを選択
 '(foreign-regexp/regexp-type 'perl) ;; Choose by your preference.
 '(reb-re-syntax 'foreign-regexp)) ;; Tell re-builder to use foreign regexp.

利用

 上の設定をすることで、perl正規表現をre-builderで使うことができ、かつその正規表現を使って置換とかができます。
 re-builderを使うと以下の様な感じ。
f:id:shiba_yu36:20130114152413p:plain

 この正規表現を使ってforeign-regexp/query-replace(M-s M-%)を実行する。今回だったらURLを全部はてな記法のtitleに変えることをしてみる。

置換の指定。
f:id:shiba_yu36:20130114152434p:plain

実際の置換。
f:id:shiba_yu36:20130114152613p:plain

 というわけでいろいろ便利に使えるので、一括置換はこちらを使いそうです。