contenttaichino.com永遠のネバーランドemacsで正規表現による置換を快適に行いたい件emacsで正規表現による置換を結構快適に使えるようになったので記録しておきます。replace-regexpは拡張正規表現と呼ばれる構文に対応していないので、スクリプト言語等で使用できる正規表現よりも機能が低く使いにくいのが問題でした。結論を先に書きますと、以下手順でemacsから快適に正規表現による置換を行えるようになりました。‘パターン;print’で置換さて、始まりは前の職場の人のperlの正規表現は凄いという発言です。その時はあまり興味が無かったのですが、HTML解析を最近頻繁にするようになると綺麗にツリー構造が作れない場合が多く、仕方なしに正規表現を使わないといけなくなったのでどうせならという事で調べる事にしました。調べてその人の発言内容は、先読み、後読みの事だと知りました。replace-regexpでは使えないという事が解りました。replace-regexpは使いたくありませんでした。いってperlスクリプトを毎回書くのは面倒すぎて正規表現を使わなくなってしまいそうです。‘スクリプト’と書くと以下と同等の処理を実行できる事を知りました。M-|からのコマンド実行と組み合わせれば、perlでの置換をreplace-regexpと同じ間隔で使用する事が出来ます。気分よくこの状態で使っていたのですが、問題がまだありました。M-|で実行したコマンドの履歴がemacsの再起動の度に消えてしまう事です。慣れて正規表現を書くのは退屈な作業になってきてましたので、何度も同じ正規表現等書きたくありません。なんとか履歴を残したいということを思い、色々調べてみましたが、上手く見つからず行き詰まっていたのですが、はてな人力検索に質問してみたところ、ドンピシャの回答を頂きまして、晴れてシェルのヒストリと共有する事が出来るようになりました。(内容はリンク先を参照ください)またzshのRC_QUOTESオプションを利用すると’で囲まれた文字列の中で”と書く事で‘を表現する事が出来るようになります。必然的にスクリプトが’で囲まれる形になるのでスクリプト中で’を使う事が出来ません。SQLへの置換時等、’を使う場面は多いので重宝します。この際に設定を行うファイルは.zshrcではなく.zshenvである事に注意して下さい。以上でemacsから気持ちよく正規表現による置換をする方法をまとめました。いい方法があればぜひとも教えて下さい。