2009年10月3日土曜日

Eclipse で正規表現によるテキストの置換 – Meadow と比較して

コメントアウトするとき

Meadow (Emacs) で指定した範囲を正規表現で置換したい場合、

  1. 範囲の選択
  2. M-x replace-regexp

により、やや癖のある正規表現を入力をして置換。コードをコメントアウトしたいときにこの操作を多用。

Eclipse をベースにした IDE を使っていると、コードをコメントアウトする操作は、

  1. 範囲の選択
  2. Ctrl + /

Meadow をカスタマイズして使いこなせないので、Eclipse は楽だなと感じる。

 

Eclipse の検索と置換で正規表現を利用

なぜかわからないけれど、Meadow ではちょっとした修正でも replace-regexp を使って置換しようという気になる。これに対して、Eclipse ではちょっとした修正なら手動でチョコチョコと手直しするのが習慣化していた。しかも、それに疑問も感じずに。。 (+_+)

さすがに面倒になってきたので、Eclipse でも正規表現でテキストの修正ができるように、操作を手に馴染ませることにした。

例えば、以下のコードの 2 ~ 4 行目を

                    with (_area.style) {
                        cssFloat = "right";
                        width = "35%";
                        padding = "10px";
                    }

次のように変換したいとする。

                    area.style.cssFloat = "right";
                    area.style.width = "35%";
                    area.style.padding = "10px";
方法

091003-005.pngまずは、Ctrl + F で 検索と置換のダイアログを表示させる。

正規表現で置換をするために、Options > Regular expressions をチェック。ただし、マウスは使いたくないので、Regular expressions の下線のある文字に注目して、Alt + x でチェック。手が思考に対応して自然に動いてくれるようにしたいので、なるべくキーボード操作で終えるように試みる。

選択した範囲のみ置換がされるために、Scope > Selected Lines もチェック。

ショートカットを覚えるのには、例えば Regular expressions なら、頭の中で発音するときに `エクスプレッション’ の太文字のところを強調していれば、そのうち慣れるかも。

正規表現モードにすると、Find と Replace With フィールドで Ctrl + Space で正規表現の候補を表示してくれる。候補を閉じたい場合は Esc 。もしくは Find フィールドから Replace With フィールドに移りたいなら、候補が表示されていても Alt + e でフォーカスを移動できる。

 

後は正規表現。

  • Find : (^\s*)(.+)
  • Replace With: $1area.style.$2

Find なら Alt + n, 置換しながら検索するなら Alt + d

Meadow の replace-regexp と違い、素直に正規表現を書けるのがうれしい。 ^^ 細かな正規表現のルールを覚えなくても、グループ化と後方参照でそこそこなんとかなりそう。

 

Meadow (Emacs) の場合

上例を Meadow でするなら `\’ の入力は、

replace-regexpでは,グループ化やバックスラッシュそのものの入力は

"\( \)"
\\
(Emacsの正規表現,re-builderとreplace-regexpの違い - yaottiの日記 - Emacsグループ より)

後方参照は、GNU Emacsマニュアル: 探索と置換 によると、

newstringの中の`\d'(dは数字)は、 regexpの中のd番目の括弧のグループ化部分に一致した部分を表します。置き換えるテキスト内に`\'を含めるには、 `\\'と入力する必要があります。

よって、次のように入力する。

  1. replace-regexp
  2. \(^ *\)\(.+\)
  3. \1_area.\2

グループ化の括弧を \ でエスケープしたり、後方参照が $1 ではなくて \1 のように書くことに注意と。

 

関連記事