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

JavaのMatchResult.end(int group)メソッドの使い方を例で解説


java.util.regex.MatchResult インターフェースは、正規表現によるマッチ処理の結果を取得するためのメソッド群を提供します。

このインターフェースのオブジェクトは、Matcher クラスの toMatchResult() メソッドを呼び出すことで取得できます。このメソッドは、現在のマッチャーが保持しているマッチ状態を表す MatchResult オブジェクトを返します。

end(int group) メソッドとは

end(int group) メソッドは、キャプチャリンググループの番号を整数で受け取り、そのグループ内で最後にマッチした文字の直後の位置(オフセット)を int 型で返します。

  • 引数には 0 以上の値を指定します。0 はパターン全体のマッチを表します。
  • 戻り値は「指定したグループの最後のマッチ文字のインデックス + 1」となります。
  • 該当するグループが存在しない場合や、まだマッチが試みられていない場合は IllegalStateException などがスローされることがあります。

サンプルコード

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

public class Example {
    public static void main(String args[]) {
        String regex = "(.*)()(\\d+)(.*)";
        // ユーザーからの入力を読み込む
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input text: ");
        String input = sc.nextLine();
        // Patternクラスのインスタンス化
        Pattern pattern = Pattern.compile(regex);
        // Matcherクラスのインスタンス化
        Matcher matcher = pattern.matcher(input);
        // マッチが発生したかどうかを確認
        if (matcher.find()) {
            System.out.println("Match found");
        }
        // MatchResultオブジェクトを取得
        MatchResult res = matcher.toMatchResult();
        // グループ1のマッチ終了位置を取得
        int end = res.end(1);
        System.out.println(end);
    }
}

実行結果

Enter input text:
This is a sample Text, 123
Match found
25

解説

この例では、入力文字列 This is a sample Text, 123 に対して正規表現 (.*)(\\d+)(.*) が適用されています。

グループ1の (.*) は貪欲マッチにより、末尾の数字「3」の直前まで(つまり「This is a sample Text, 12」まで)にマッチします。グループ1の最後の文字はインデックス24に位置するため、res.end(1) はその次の位置である 25 を返します。

  1. 【Java入門】Matcherクラスのreset()メソッドの使い方を実例付きで解説

    java.util.regex.Matcher クラスは、正規表現によるさまざまなマッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されておらず、java.util.regex.Pattern クラスの matcher() メソッドを使うことで、Matcher オブジェクトを生成・取得できます。Matcher クラスの reset() メソッドを呼び出すと、マッチャーが保持しているすべての状態情報が破棄され、文字シーケンスはデフォルトの状態に戻り、追加位置(append position)もゼロにリセットされます。つまり、同じ Matcher オブジェクトを最初か

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

    java.util.regex.Matcher クラスは、正規表現による各種マッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されていないため、java.util.regex.Pattern クラスの matcher() メソッドを使用してオブジェクトを生成・取得します。 pattern() メソッドは、現在の Matcher が解釈に使用している Pattern オブジェクトを取得して返します。引数は不要で、戻り値は java.util.regex.Pattern 型です。「実際にどの正規表現で照合を行ったのか」を後から確認したい場合などに便利なメソッドです。