読者です 読者をやめる 読者になる 読者になる

「Java」大文字小文字を区別しない正規表現

Java の Pattern で大文字小文字を区別せずに正規表現にマッチさせるサンプルです。

当然ながら、以下のようなコードだと data1 の "Example" だけマッチして、data2、data3 はマッチしません。

■ 大文字小文字が区別されるので "Example" しかマッチしない

package test.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexCaseInsensitive {

  private static Pattern p = Pattern.compile("Example");

  public static void main(String[] args) {
    String data1 = "Example";
    String data2 = "example";
    String data3 = "EXAMPLE";
    
    Matcher m = p.matcher(data1);
    System.out.println("data1:" + m.matches());
    
    m = p.matcher(data2);
    System.out.println("data2:" + m.matches());
    
    m = p.matcher(data3);
    System.out.println("data3:" + m.matches());
  }
}


■ 実行結果

data1:true
data2:false
data3:false


やり方はいろいろあると思いますが、Pattern#compile(String regex, int flags) で第二引数のフラグに CASE_INSENSITIVE を渡す正規表現を "(?i)Example" と書く、ことで大文字小文字を区別せずにマッチさせることができます。

・Pattern (Java Platform SE 8 )
https://docs.oracle.com/javase/jp/8/docs/api/java/util/regex/Pattern.html

  private static Pattern p = Pattern.compile("Example", Pattern.CASE_INSENSITIVE);

or

  private static Pattern p = Pattern.compile("(?i)Example");


■ 実行結果

data1:true
data2:true
data3:true


以上になります。

[ 環境情報 ]
Windows 7 SP1
Java SE 8 Update 74