CASE_INSENSITIVEフラグ(大文字と小文字を区別しない)

Java の正規表現で利用可能なフラグの一つである CASE_INSENSITIVE フラグの使い方です。 CASE_INSENSITIVE フラグを有効にすると、パターンは大文字と小文字を区別しないようになります。ここでは Java の正規表現における CASE_INSENSITIVE フラグの使い方について解説します。

(Last modified: )

CASE_INSENSITIVEフラグを有効にする

CASE_INSENSITIVE フラグは Java で利用可能なフラグの一つで、有効にすることで大文字と小文字を区別せずにマッチするかどうかを調べるようになります。

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

String r = "apple";
Pattern p = Pattern.compile(r, Pattern.CASE_INSENSITIVE);

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

String r = "(?i)apple";
Pattern p = Pattern.compile(r);

※ なお CASE_INSENSITIVE フラグは US-ASCII の文字のみに有効です。全角文字など Unicode 準拠文字でも大文字小文字の区別を行わないようにするには、あわせて UNICODE_CASE フラグを有効にする必要があります。「UNICODE_CASEフラグ(Unicode準拠の文字でも大文字と小文字を区別しない)」を参照されてください。

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

CASE_INSENSITIVE フラグを有効にした場合にどのように変わるのかを確認します。パターンとして apple を指定した場合で試してみます。

String r = "apple";
Pattern p = Pattern.compile(r);

デフォルトではパターンは大文字と小文字を区別するので apple にはマッチしますが Apple や APPLE にはマッチしません。

apple
✕ Apple
✕ APPLE

次に CASE_INSENSITIVE フラグを有効にしてみます。

String r = "apple";
Pattern p = Pattern.compile(r, Pattern.CASE_INSENSITIVE);

パターンは大文字と小文字を区別せずにマッチするかどうか調べるので apple の他に Apple や APPLE にもマッチします。

appleAppleAPPLE
サンプルコード

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

import java.util.regex.*;

class JSample17_1{
  public static void main(String[] args){
    String[] target = {"apple", "Apple", "APPLE"};

    String regex = "apple";
    Pattern p1 = Pattern.compile(regex);

    for (int i = 0; i < target.length ; i++){
      Matcher m = p1.matcher(target[i]);
      System.out.println(target[i] + ":" + m.find());
    }

    System.out.println("---- ----");

    Pattern p2 = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

    for (int i = 0; i < target.length ; i++){
      Matcher m = p2.matcher(target[i]);
      System.out.println(target[i] + ":" + m.find());
    }
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample17_1.java

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

java JSample17_1

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

パターン文字列が、 3 つの文字列に対してそれぞれ文字列全体とマッチするかどうかを調べ結果を画面に表示しました。

-- --

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

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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