Javaの正規表現

Java で正規表現を利用する場合の記述方法です。 Pattern オブジェクトと Matcher オブジェクトの作成方法、メソッドを使ってマッチした文字列を取得したり置換を行う方法、そして Java で利用可能なオプション(フラグ)について解説します。

※ Java を使った正規表現の詳細な使い方については「Java入門」の中の「Java正規表現の使い方」を参照されてください。

(Last modified: )

PatternオブジェクトとMatcherオブジェクトの作成

Java で正規表現を利用するには、パターンを表す文字列を定義し、その文字列を元に Pattern オブジェクトを作成します。

String regex = "A.*E";
Pattern p = Pattern.compile(regex);

次に対象となる文字列を引数に指定して Matcher オブジェクトを作成します。作成するには Pattern クラスの matcher メソッドを使用して次のように行います。

String regex = "A.*E";
Pattern p = Pattern.compile(regex);

Matcher m = p.matcher("I LIKE APPLE");

作成した Matcher オブジェクトに対して、パターンが対象の文字列とマッチするかどうかを調べたり、対象の文字列の中のパターンとマッチした部分を別の文字列で置換したりすることができます。

各種メソッドの利用

Java で文字列がパターンにマッチしているかどうか調べるには Matcher クラスの find メソッドを使います。マッチした場合は true を返します。

String regex = "A.*E";
Pattern p = Pattern.compile(regex);

Matcher m = p.matcher("I LIKE APPLE");
if (m.find()){
  System.out.println("match!");
}

マッチした文字列を取得するには Matcher クラスの group メソッドを使います。

String regex = "A.*E";
Pattern p = Pattern.compile(regex);

Matcher m = p.matcher("I LIKE APPLE");
if (m.find()){
  System.out.println(m.group());  // APPLE
}

マッチした文字列を別の文字列に置換するには Matcher クラスの replaceFirst メソッドを使います。

String regex = "A.*E";
Pattern p = Pattern.compile(regex);

Matcher m = p.matcher("I LIKE APPLE");
if (m.find()){
  String replaceText = m.replaceFirst("ORANGE");
  System.out.println(replaceText);  // I LIKE ORANGE
}

Javaで使用できるオプション(フラグ)

Java で用意されているオプション(フラグ)は次の 9 種類です。

修飾子埋め込みフラグ説明
Pattern.CASE_INSENSITIVE(?i)大文字と小文字を区別しないマッチングを有効にする
Pattern.MULTILINE(?m)複数行モードを有効にする
Pattern.DOTALL(?s)DOTALL モードを有効にする
Pattern.UNICODE_CASE(?u)Unicode に準拠した大文字と小文字を区別しないマッチングを有効にする
Pattern.UNICODE_CHARACTER_CLASS(?U)定義済みの文字クラスとPOSIX文字クラスのUnicodeバージョンを使用可能にする
Pattern.CANON_EQ--正規等価を有効にする
Pattern.UNIX_LINES(?d)Unix ラインモードを有効にする
Pattern.LITERAL--パターンのリテラル構文解析を有効にする
Pattern.COMMENTS(?x)パターン内で空白とコメントを使用できるようにする

-- --

Java で正規表現を利用する場合の記述方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。