Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Java辞典

  1. トップページ
  2. Java辞典
  3. Pattern.compile() / Matcher.matches() / find()

Pattern.compile() / Matcher.matches() / find()

正規表現のコンパイルとマッチングを行うクラスです。『Pattern.compile()』で正規表現をコンパイルし、『matcher()』でマッチャーを生成して文字列との照合を行います。

構文
// 正規表現をコンパイルしてPatternオブジェクトを作成します。
Pattern p = Pattern.compile(String regex);
Pattern p = Pattern.compile(String regex, int flags);

// 文字列に対するMatcherオブジェクトを生成します。
Matcher m = p.matcher(CharSequence input);

// 文字列全体が正規表現に一致するか確認します。
boolean result = m.matches();

// 正規表現に一致する部分を順に検索します。
boolean found = m.find();

// 直前のfind()またはmatches()でマッチした文字列を取得します。
String matched = m.group();
String matched = m.group(int group);
メソッド一覧
メソッド概要
Pattern.compile(String regex)正規表現をコンパイルして Pattern オブジェクトを返します。
Pattern.compile(String regex, int flags)フラグ(Pattern.CASE_INSENSITIVE など)を指定してコンパイルします。
p.matcher(CharSequence input)指定した文字列に対して照合を行う Matcher オブジェクトを返します。
m.matches()文字列全体がパターンに一致する場合に true を返します。
m.find()パターンに一致する次の部分文字列を検索します。一致する度に呼び出すことができます。
m.group()直前のマッチで一致した文字列を返します。
m.group(int group)指定したキャプチャグループ番号に対応する文字列を返します。
m.start() / m.end()マッチした部分の開始・終了インデックスを返します。
サンプルコード
import java.util.regex.*;

// matches() で文字列全体が郵便番号形式かを確認します。
Pattern p = Pattern.compile("\\d{3}-\\d{4}");
Matcher m = p.matcher("123-4567");
System.out.println(m.matches()); // 『true』と出力されます。

// find() でメールアドレスをすべて抽出します。
String text = "連絡先: alice@example.com または bob@test.jp です。";
Pattern emailPattern = Pattern.compile("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}");
Matcher emailMatcher = emailPattern.matcher(text);
while (emailMatcher.find()) {
    System.out.println(emailMatcher.group()); // 『alice@example.com』『bob@test.jp』と出力されます。
}

// group() でキャプチャグループを取り出します。
Pattern datePattern = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})");
Matcher dateMatcher = datePattern.matcher("今日は2026-03-05です。");
if (dateMatcher.find()) {
    System.out.println(dateMatcher.group(1)); // 『2026』と出力されます。
    System.out.println(dateMatcher.group(2)); // 『03』と出力されます。
    System.out.println(dateMatcher.group(3)); // 『05』と出力されます。
}

// CASE_INSENSITIVE フラグで大文字・小文字を無視します。
Pattern casePattern = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
Matcher caseMatcher = casePattern.matcher("Javaは汎用言語です。");
System.out.println(caseMatcher.find()); // 『true』と出力されます。
概要

『Pattern.compile()』は正規表現文字列をコンパイルして再利用可能な Pattern オブジェクトを生成します。同じパターンを繰り返し使用する場合はコンパイル済みの Pattern を使い回すことで、パフォーマンスを向上させることができます。

『matches()』は文字列全体がパターンと一致するかを確認し、『find()』はパターンに一致する部分を順に検索します。『matches()』は文字列全体が対象なのに対し、『find()』は部分一致の検索です。意図に合わせて使い分けてください。

正規表現を使った置換には『Matcher.replaceAll() / replaceFirst()』を使用してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。