COMMENTSフラグ(パターンの中にコメントを記述する)

Java の正規表現で利用可能なフラグの一つである COMMENTS フラグの使い方です。 COMMENTS フラグを有効にすると、パターンの中にコメントを記述できるようになります。ここでは Java の正規表現における COMMENTS フラグの使い方について解説します。

(Last modified: )

COMMENTSフラグを有効にする

COMMENTS フラグは Java で利用可能なフラグの一つで、有効にすることでパターン内にコメントを記述できるようになります。複雑なパターンに対して、あとから見て分かりやすいようにパターン内の一部毎にコメントを追加したい場合などに便利です。

COMMENTS フラグを有効にするには、 compile メソッドの引数に Pattern.COMMENTS を指定してパターンオブジェクトを作成してください。

String r = "ABC  # コメント";
Pattern p = Pattern.compile(r, Pattern.COMMENTS);

またはパターンを表す文字列の中に埋め込みフラグの (?x) を記述してください。

String r = "(?x)ABC  # コメント";
Pattern p = Pattern.compile(r);

パターン内へのコメントの記述方法

COMMENTS フラグを有効にした場合、パターン内に # を記述すると行末までコメントとして扱われます。

String r = "ABC#コメント";

この例では ABC の部分が実際のパターンの部分で、 #コメント の部分はコメントなので実行時には無視されます。

またパターン内に記述した空白も無視されます。

String r = "ABC    #コメント";

この例ではコメントの前に空白がいくつかありますが、実行時にはすべて無視されます。そのためこの場合も ABC の部分だけが実際のパターンです。

注意点

なお COMMENTS フラグが有効な場合には空白がすべて無視されるので、空白を含めた "AB CD" のようなパターンを記述しても "ABCD" というパターンとして扱われます。文字クラスの中で "[AB ]" のように記述した場合も同じように "[AB]" として扱われます。

空白文字をパターンの中で使用する場合には空白の前のバックスラッシュ(\)をつけて "AB\ CD" や "[AB\ ]" のように記述してください。

String r = "AB\\ CD    #コメント";

COMMENTSフラグによるマッチングの違い

COMMENTS フラグを有効にしても、コメントが記述できるだけなので挙動そのものは変わりがありません(ただ前述したとおり、空白がすべて無視されるので、その点は注意が必要です)。

コメントの記述方法ですが、特に決まりはありません。例えば次のようなパターンがあった場合でコメントを記述してみます。

String r = "[a-zA-Z]{2}-[0-9]{3}";

まずコメントを記述する単位で文字列を複数の行に分けます。

String r = "[a-zA-Z]{2}" + 
           "-" + 
           "[0-9]{3}";

行ごとにコメントを記述していきます。

String r = "[a-zA-Z]{2}  # 製品名" + 
           "-            # ハイフン" + 
           "[0-9]{3}     # 製品コード";

※ Java SE 15 の時点では複数行の文字列を定義する方法がありませんので、文字列を連結して記述しています。

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample21-1.java という名前で保存します。

import java.util.regex.*;

class JSample21_1{
  public static void main(String[] args){
    String target = "AZ-243";
    String regex = "[a-zA-Z]{2}  # 製品名" + 
                   "-            # ハイフン" + 
                   "[0-9]{3}     # 製品コード";
    Pattern p = Pattern.compile(regex, Pattern.COMMENTS);

    Matcher m = p.matcher(target);
    System.out.println(target + ":" + m.find());
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample21_1.java

その後で、次のように実行してください。

java JSample21_1

COMMENTSフラグによるマッチングの違い(1)

COMMENTS フラグを有効にすることで、パターンの中にコメントを記述することができました。

-- --

Java の正規表現における COMMENTS フラグの使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。