Java
 Computer >> コンピューター >  >> プログラミング >> Java

例で学ぶJava Matcherクラスのpattern()メソッド


java.util.regex.Matcher クラスは、正規表現による各種マッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されていないため、java.util.regex.Pattern クラスの matcher() メソッドを使用してオブジェクトを生成・取得します。

pattern() メソッドは、現在の Matcher が解釈に使用している Pattern オブジェクトを取得して返します。引数は不要で、戻り値は java.util.regex.Pattern 型です。「実際にどの正規表現で照合を行ったのか」を後から確認したい場合などに便利なメソッドです。

例1:日付(MM/DD/YYYY)の妥当性チェック

次の例では、ユーザーが入力した日付が「MM/DD/YYYY」形式(月:01〜12、日:01〜31、年:4桁の数字)として有効かどうかを正規表現で検証し、最後に pattern() メソッドで使用中のパターンを取得して表示しています。

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

public class PatternExample {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("生年月日を入力してください(MM/DD/YYYY)");
        String date = sc.next();
        String regex = "^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$";
        // Patternオブジェクトを作成
        Pattern pattern = Pattern.compile(regex);
        // Matcherオブジェクトを作成
        Matcher matcher = pattern.matcher(date);
        // 日付の妥当性を検証
        if(matcher.matches())
            System.out.println("日付は有効です");
        else
            System.out.println("日付は無効です");
        // 使用されたPatternを取得して表示
        Pattern p = matcher.pattern();
        System.out.println("日付の照合に使用されたパターン:\n" + p);
    }
}

実行結果

生年月日を入力してください(MM/DD/YYYY)
01/21/2019
日付は有効です
日付の照合に使用されたパターン:
^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$

例2:数字で始まる文字列かどうかの判定

続いて、入力された文字列が数字で始まっているかどうかを判定する例です。ここでも pattern() メソッドを使って、照合に使用された正規表現を画面に出力しています。

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

public class PatternExample {
    public static void main(String args[]) {
        // ユーザーから文字列を読み込む
        System.out.println("文字列を入力してください");
        Scanner sc = new Scanner(System.in);
        String input = sc.next();
        // 数字で始まる文字列に一致する正規表現
        String regex = "^[0-9].*$";
        // 正規表現をコンパイル
        Pattern pattern = Pattern.compile(regex);
        // Matcherオブジェクトを取得
        Matcher matcher = pattern.matcher(input);
        // pattern()メソッドで使用中のパターンを取得
        Pattern p = matcher.pattern();
        System.out.println("入力文字列の照合に使用されたパターン: " + p);
        // マッチしたかどうかを確認
        if(matcher.matches())
            System.out.println("最初の文字は数字です");
        else
            System.out.println("最初の文字は数字ではありません");
    }
}

実行結果

文字列を入力してください
2sample
入力文字列の照合に使用されたパターン: ^[0-9].*$
最初の文字は数字です

pattern()メソッドのポイントまとめ

  • 戻り値は、Matcher の生成時に Pattern.matcher() に渡された Pattern オブジェクトそのものです。
  • 引数を受け取らず、呼び出しによって Matcher の状態が変化することもありません。
  • 正規表現を動的に組み立てるプログラムでは、「どのパターンで照合したか」をログ出力やデバッグに活用できます。
  1. JavaのMatcher.matches()メソッドとは?使い方をサンプルコード付きで解説

    java.util.regex.Matcherクラスは、正規表現を用いたさまざまなマッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されておらず、java.util.regex.Patternクラスのmatcher()メソッドを使ってオブジェクトを取得します。 matches()メソッドは、対象の文字列全体が、Patternオブジェクトの作成時に指定された正規表現パターンと一致するかどうかを判定します。一致する場合はtrueを返し、一致しない場合はfalseを返します。重要なポイントとして、このメソッドがtrueを返すためには、検索対象の領域全体がパターンに一致し

  2. JavaのMatcherクラスstart()メソッドとは?サンプルコード付きで解説

    java.util.regex.Matcherクラスは、正規表現を用いたさまざまなマッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されておらず、java.util.regex.Patternクラスのmatcher()メソッドを使用することで、Matcherオブジェクトを取得できます。 Matcherクラスのstart()メソッドは、直前にマッチした文字列の開始インデックス(先頭からの位置)をint型で返します。 start()メソッドの基本的な動作 正規表現における文字クラス「[...]」は、括弧内に指定したいずれか1文字に一致します。以下の例では、この文字クラ