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
プログラミングや開発環境構築の解説サイトを運営しています。