Menu
Coddy logo textTech

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

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

Pattern クラスと Matcher クラスは、Java での regex 操作に強力なツールを提供します。まず、それらを使用する方法を理解しましょう:

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

Pattern pattern = Pattern.compile("cat");
// Creates a pattern to find "cat"

テキスト用の matcher を作成:

String text = "The cat and dog";
Matcher matcher = pattern.matcher(text);
// Creates a matcher for the text

これで matcher.find() を使用してマッチを見つけることができます:

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

上記のコードを実行した後、出力は:Found at: 4

メソッドの理解:

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

複数のマッチを含む例:

Pattern pattern = Pattern.compile("cat");
Matcher matcher = pattern.matcher("cat and cat");

while (matcher.find()) {
   System.out.println("Found at: " + matcher.start());
}
// Output:
// 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")

チートシート

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());
}

主要なメソッド:

  • <b>matcher.find()</b> - パターンの次の出現を検索します
    • 見つかった場合は true を返し、これ以上マッチがない場合は false を返します
    • すべての出現を見つけるためにループで使用します
  • <b>matcher.start()</b> - 最後に見つかったマッチの開始インデックスを返します
    • 成功した find() の後に呼び出します

自分で試してみよう

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腕試し

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

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