Java Matcher クラス

Java のMatcherクラスはjava.util.regexパッケージ内の重要なクラスで、文字列に対してさまざまなマッチング操作を実行するために使用されます。Matcherクラス自体は直接インスタンス化できず、Patternクラスのmatcher()メソッドによって作成する必要があります。

Matcherクラスの主な機能は次のとおりです:

  • 正規表現のマッチング操作を実行する
  • 文字列内でパターンに一致する部分シーケンスを検索する
  • 一致したテキストを置換する

Matcher オブジェクトの作成

使用するにはMatcherクラスを使用するには、まずPatternオブジェクトを作成し、それを介してMatcherオブジェクトを作成します:

例

import java.util.regex.*;

// Pattern オブジェクトを作成
Pattern pattern = Pattern.compile("a*b");

// Matcher オブジェクトを作成
Matcher matcher = pattern.matcher("aaaaab");

Matcher クラスのよく使われるメソッド


マッチング操作メソッド

matches() メソッド

matches()このメソッドは、入力シーケンス全体をパターンと照合しようとします:

例

boolean result = matcher.matches(); // true または false を返す

lookingAt() メソッド

lookingAt()このメソッドは、入力シーケンスの先頭からパターンのマッチングを試みます:

例

boolean result = matcher.lookingAt(); // 文字列全体をマッチングする必要はない

find() メソッド

find()このメソッドは、入力シーケンス内で次に一致する部分シーケンスを検索します:

例

while(matcher.find()) {
    System.out.println("一致が見つかりました: " + matcher.group());
}

マッチ情報を取得するメソッド

group() メソッド

group()このメソッドは、前回のマッチング操作で一致した入力部分シーケンスを返します:

例

String matchedText = matcher.group();

start() と end() メソッド

start()とend()このメソッドは、前回のマッチの開始インデックスと終了インデックスを返します:

例

int start = matcher.start(); // マッチ開始位置
int end = matcher.end();     // マッチ終了位置

groupCount() メソッド

groupCount()このマッチャーのパターン内のキャプチャグループの数を返します:

例

int count = matcher.groupCount();

置換操作メソッド

replaceAll() メソッド

replaceAll()このメソッドは、入力シーケンス内でパターンに一致するすべての部分シーケンスを置換します:

例

String result = matcher.replaceAll("replacement");

replaceFirst() メソッド

replaceFirst()このメソッドは、入力シーケンス内でパターンに一致する最初の部分シーケンスを置換します:

例

String result = matcher.replaceFirst("replacement");

例

以下は、...の使用方法を示す完全な例です。Matcherクラス:

例

import java.util.regex.*;

public class MatcherExample {
    public static void main(String[] args) {
        String text = "The quick brown fox jumps over the lazy dog";
        Pattern pattern = Pattern.compile("\\b\\w{4}\\b"); // 4文字の単語に一致
        Matcher matcher = pattern.matcher(text);
       
        System.out.println("元のテキスト: " + text);
        System.out.println("4文字の単語に一致:");
       
        while(matcher.find()) {
            System.out.println("見つかった '" + matcher.group() +
                              "' の位置 " + matcher.start() + "-" + (matcher.end()-1));
        }
       
        // すべての4文字の単語を"****"に置換
        String replaced = matcher.replaceAll("****");
        System.out.println("\n置換後のテキスト: " + replaced);
    }
}

出力結果

原始文本: The quick brown fox jumps over the lazy dog
匹配4字母单词:
找到 'quick' 在位置 4-8
找到 'brown' 在位置 10-14
找到 'jumps' 在位置 20-24
找到 'over' 在位置 26-29
找到 'lazy' 在位置 35-38

替换后的文本: The **** **** fox **** **** the **** dog

まとめ

Java のMatcherクラスは強力な正規表現マッチング機能を提供し、それを使用して以下ができます:

  1. 文字列が特定のパターンに一致するかどうかを確認する
  2. 文字列内のパターンマッチを検索する
  3. 一致した部分文字列を抽出する
  4. 一致したテキストを置換する

習得Matcherクラスは、文字列とテキストパターンのマッチング処理において非常に重要であり、Javaプログラミングにおいて非常に実用的なツールです。

マッチング操作メソッド

メソッド 説明
boolean matches() 領域全体をパターンと照合しようとする
boolean lookingAt() 領域の先頭からパターンのマッチングを試みる
boolean find() 次に一致する部分シーケンスを検索しようとする
boolean find(int start) 指定された位置から次の一致を検索する

マッチ結果を取得するメソッド

メソッド 説明
String group() 前回のマッチの部分シーケンスを返す
String group(int group) 指定されたキャプチャグループの一致内容を返す
String group(String name) 名前付きキャプチャグループの一致内容を返す(Java 7+)
int groupCount() パターン内のキャプチャグループの数を返す
int start() 前回のマッチの開始インデックスを返す
int start(int group) 指定されたグループのマッチ開始インデックスを返す
int end() 前回のマッチの終了インデックスを返す
int end(int group) 指定されたグループのマッチ終了インデックスを返す

置換操作メソッド

メソッド 説明
Matcher appendReplacement(StringBuffer sb, String replacement) 非終端の置換操作を実行する
StringBuffer appendTail(StringBuffer sb) 終端の置換操作を実行する
String replaceAll(String replacement) 一致するすべての部分シーケンスを置換する
String replaceFirst(String replacement) 最初に一致する部分シーケンスを置換する
static String quoteReplacement(String s) 置換文字列のリテラルを返す

領域制御メソッド

メソッド 説明
Matcher region(int start, int end) マッチャーの検索領域を設定する
int regionStart() マッチャー領域の開始インデックスを返す
int regionEnd() マッチャー領域の終了インデックスを返す
boolean hasTransparentBounds() 透明境界を使用するかどうかを確認する
Matcher useTransparentBounds(boolean b) 透明境界を使用するかどうかを設定する
boolean hasAnchoringBounds() アンカー境界を使用するかどうかを確認する
Matcher useAnchoringBounds(boolean b) アンカー境界を使用するかどうかを設定する

その他のメソッド

メソッド 説明
Pattern pattern() このマッチャーのパターンを返す
Matcher reset() マッチャーをリセットする
Matcher reset(CharSequence input) 新しい入力でマッチャーをリセットする
boolean hitEnd() マッチャーが入力の終わりに達したかどうかを示す
boolean requireEnd() マッチングにより多くの入力が必要かどうかを示す
その他の拡張