2011年8月21日日曜日

Intellijの便利な正規表現編集

Javaソースコード上で正規表現を書く場合に、Javaのエスケープと正規表現のメタ文字に対するエスケープが同じ文字(\)なので、非常に面倒に思う場面がある。

その面倒な部分をうまく解消してくれる地味だけど非常に便利な正規表現編集機能がIntellijにはあります。

使用方法

正規表現部分にカーソルを移動して、クイックフィックスから「Edit RegExp Format」を選択する。
正規表現を編集するためのエディタが新規に開かれるので、正規表現を編集する。
この時には、Java文字列に対するエスケープは考えずに書けば良い。なので、純粋に正規表現のことだけを考えればよく直感的にコーディングが出来る。
また、正規表現がすでに書かれた状態でこのエディタ(Edit RegExp Format)を選択した場合も、Javaのエスキープ文字が削除されているので、正規表現を確認するときにも使うことができる。
画面的には、こんな感じになっている。


上記画面で編集を行っていると、リアルタイムにJavaコードに正規表現が反映されていきます。編集が終わったあとは「Esc」ボタンで閉じることが出来ます。
上記画面の正規表現がJavaコードに反映されると、Javaのエスケープ文字が追加されているのがわかります。

Intellijのすごいところは、正規表現を文字列定数とかで持っていても、この文字列は正規表現であると判断してこんな感じにクイックフィックスを表示してくれることです。

ここまでの例では、すべてJDK付属の正規表現ライブラリを使用していまいしたがオープンソースや自作の正規表現ライブラリに対しても上記と同じことができます。
例えば、こんな感じのクラスのsetRegexの引数を正規表現としたい場合の例
class HogeRegex {

    public void setRegex(String regex) {
        
    }
}
Settings画面から、Language Injectionを選択します。画面的には、こんな画面が表示されます。

「+」ボタンをクリックして「Java Parameter」を選択します。
表示されるサブウィンドウに下記のように入力します。
ID:RegExpを選択
Class-Name:正規表現ライブラリのクラス名入力する。(今回の例だとHogeRegexを入力する。)
Parameters:メソッド一覧とメソッドの持つパラメータ一覧が表示されるので正規表現を引数で受け取るパラメータにチェックを入れる。
設定を終えると、JDKのライブラリを使ったときと同じようにクイックフィックスに「Edit RegExp Format」が表示されるようになります。

ちなみにPatternクラスも、Language Injectionにちゃんと登録されていたりします。