Menu
CoddyTech

Regex によるパターンマッチング

CoddyのJavaジャーニー「ロジックとフロー」セクションの一部。レッスン 47/59。

Pattern クラスと Matcher クラスは、Java で正規表現操作を行うための強力なツールを提供します。まず、それらの使い方を理解しましょう。

Pattern.compile() を使用して pattern を作成します:

Pattern pattern = Pattern.compile("cat");
// 「cat」を見つけるパターンを作成します

テキスト用のmatcherを作成します:

String text = "The cat and dog";
Matcher matcher = pattern.matcher(text);
// テキスト用のマッチャーを作成します

これで、matcher.find() を使って一致する箇所を検索できます:

while (matcher.find()) {
   System.out.println("Found at: " + matcher.start());
}

上記のコードを実行すると、出力は次のようになります:Found at: 4

メソッドの理解:

  • matcher.find() - テキスト内でパターンの次の出現箇所を検索します
    • 一致が見つかった場合はtrueを返します
    • これ以上一致が存在しない場合はfalseを返します
    • これが、すべての出現箇所を見つけるためにwhileループで使用する理由です
  • matcher.start() - find()によって最後に見つかった一致の開始インデックス(位置)を返します
    • この例では、"cat"は"The cat and dog"のインデックス4から始まります
    • find()が成功した後に呼び出す必要があります

複数の一致を含む例:

Pattern pattern = Pattern.compile("cat");
Matcher matcher = pattern.matcher("cat and cat");
while (matcher.find()) {
   System.out.println("Found at: " + matcher.start());
}
// 出力:
// Found at: 0
// Found at: 8
challenge icon

チャレンジ

簡単

findWordsという名前のメソッドを作成し、2つの引数を受け取るようにします。

  1. 検索対象となる String(text)
  2. 検索する String(word)

メソッドは次の処理を行う必要があります。

  1. Pattern と Matcher を使用して、単語のすべての出現箇所を検索する
  2. 単語が見つかった位置を含む文字列を返す
  3. 位置はスペースで区切る

返すメッセージは次のとおりです。

  • いずれかの入力が null の場合:"Invalid input" を返す
  • 単語が見つからない場合:"Not found" を返す
  • 見つかった場合:位置を返す(例:"4 10 15")

自分で試してみよう

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

public class Main {
    public static String findWords(String text, String word) {
        // ここにコードを書いてください
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String text = scanner.nextLine();
        String word = scanner.nextLine();
        
        if (text.equals("null")) text = null;
        if (word.equals("null")) word = null;
        
        System.out.println(findWords(text, word));
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: Javaオンラインコンパイラ

自分のテキストでパターンを試す: 正規表現テスター