Java で文字列が正規表現に一致するかどうかを確認する方法

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Java で文字列が正規表現に一致するかどうかをチェックする方法を学びます。まず、正規表現の基本を理解し、java.util.regex パッケージを使用して簡単なパターンを作成する方法を学びます。

次に、Pattern クラスと Matcher クラスを使ってマッチ操作を行います。最後に、ユーザー入力で正規表現パターンをテストするために学んだ知識を適用し、Java で文字列の検証と操作に正規表現を使用する実践的な経験を積みます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/StringManipulationGroup -.-> java/strings("Strings") java/StringManipulationGroup -.-> java/regex("RegEx") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/user_input("User Input") subgraph Lab Skills java/strings -.-> lab-559992{{"Java で文字列が正規表現に一致するかどうかを確認する方法"}} java/regex -.-> lab-559992{{"Java で文字列が正規表現に一致するかどうかを確認する方法"}} java/user_input -.-> lab-559992{{"Java で文字列が正規表現に一致するかどうかを確認する方法"}} end

基本的な正規表現パターンの作成

このステップでは、正規表現 (regex) とは何か、および Java で基本的なパターンを作成する方法を理解します。

正規表現は、テキストの文字列のマッチングと操作に使用される強力なツールです。テキスト内のパターンを記述するためのミニ言語と考えてください。特定のテキストの検索、入力形式の検証 (メールアドレスや電話番号など)、パターンに基づくテキストの置換などのタスクに非常に役立ちます。

Java では、正規表現は java.util.regex パッケージによって扱われます。主に使用する 2 つのクラスは PatternMatcher です。

  • Pattern:このクラスはコンパイルされた正規表現を表します。正規表現文字列を Pattern オブジェクトにコンパイルします。
  • Matcher:このクラスは、Pattern を解釈して入力文字列に対してマッチ操作を行うために使用されます。

基本的な正規表現パターンを定義して出力する簡単な Java プログラムを作成しましょう。

  1. WebIDE エディタで HelloJava.java ファイルが開いていない場合は、開きます。

  2. ファイルの内容全体を次のコードに置き換えます。

    import java.util.regex.Pattern;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Define a simple regex pattern to match the word "Java"
            String regexPattern = "Java";
    
            // Compile the regex pattern
            Pattern pattern = Pattern.compile(regexPattern);
    
            // Print the pattern
            System.out.println("Our regex pattern is: " + pattern.pattern());
        }
    }

    新しい部分を見てみましょう。

    • import java.util.regex.Pattern;:この行は、正規表現を扱うために必要な Pattern クラスをインポートします。
    • String regexPattern = "Java";:この行は、正規表現を保持する単純な文字列変数 regexPattern を定義します。この場合、パターンはリテラルの単語 "Java" です。
    • Pattern pattern = Pattern.compile(regexPattern);:ここで、正規表現文字列を Pattern オブジェクトにコンパイルします。Pattern.compile() メソッドは正規表現文字列を引数として受け取り、Pattern オブジェクトを返します。
    • System.out.println("Our regex pattern is: " + pattern.pattern());:この行は、Pattern オブジェクトを作成するために使用された元の正規表現文字列を出力します。Pattern オブジェクトの pattern() メソッドは正規表現文字列を返します。
  3. ファイルを保存します (Ctrl+S または Cmd+S)。

  4. 次に、プログラムをコンパイルしましょう。WebIDE の下部にあるターミナルを開き、~/project ディレクトリにいることを確認します。次のコマンドを実行します。

    javac HelloJava.java

    エラーがなければ、~/project ディレクトリに HelloJava.class ファイルが作成されます。

  5. 最後に、コンパイルされたプログラムを実行します。

    java HelloJava

    次の出力が表示されるはずです。

    Our regex pattern is: Java

    これにより、基本的な正規表現パターンが正常に定義され、コンパイルされたことが確認できます。次のステップでは、このパターンを使用して、与えられた文字列内のマッチを見つけます。

Pattern クラスと Matcher クラスの使用

このステップでは、Pattern とともに Matcher クラスを使用して、与えられた入力文字列内でパターンの出現箇所を見つける方法を学びます。

前のステップで説明したように、Pattern クラスはコンパイルされた正規表現を表します。Matcher クラスは、そのコンパイルされたパターンを使用して特定の入力文字列に対して検索操作を実際に行うために使用します。

一般的な処理の流れは次のとおりです。

  1. 正規表現をコンパイルするPattern.compile() を使用して正規表現文字列から Pattern オブジェクトを作成します。
  2. Matcher を作成するPattern オブジェクトに対して matcher() メソッドを呼び出し、検索したい入力文字列を渡して Matcher オブジェクトを取得します。
  3. マッチを実行するMatcher オブジェクトのメソッドを使用してマッチを見つけます。一般的なメソッドには、find()(次のマッチを見つける)と matches()(入力文字列全体がパターンに一致するかどうかをチェックする)があります。

HelloJava.java プログラムを変更して、Matcher を使用してサンプル文の中から "Java" という単語を見つけましょう。

  1. WebIDE エディタで HelloJava.java ファイルを開きます。

  2. 既存のコードを次のコードに置き換えます。

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Define a simple regex pattern to match the word "Java"
            String regexPattern = "Java";
    
            // The input string to search within
            String inputString = "Hello, Java! Welcome to Java programming.";
    
            // Compile the regex pattern
            Pattern pattern = Pattern.compile(regexPattern);
    
            // Create a Matcher object
            Matcher matcher = pattern.matcher(inputString);
    
            // Find and print the matches
            System.out.println("Searching for pattern: '" + regexPattern + "' in string: '" + inputString + "'");
    
            while (matcher.find()) {
                System.out.println("Found match at index: " + matcher.start());
            }
        }
    }

    新しい部分は次のとおりです。

    • import java.util.regex.Matcher;Matcher クラスをインポートします。
    • String inputString = "Hello, Java! Welcome to Java programming.";:検索対象の文字列を定義します。
    • Matcher matcher = pattern.matcher(inputString);pattern オブジェクトに対して matcher() メソッドを呼び出し、inputString を渡して Matcher オブジェクトを作成します。
    • while (matcher.find()) { ... }:このループは Matcherfind() メソッドを使用します。find() メソッドは、入力シーケンスの中でパターンに一致する次の部分シーケンスを見つけようとします。マッチが見つかった場合は true を返し、そうでない場合は false を返します。while ループは find()true を返す限り続きます。
    • System.out.println("Found match at index: " + matcher.start());:ループ内で、マッチが見つかった場合、matcher.start() は入力文字列内でマッチした部分シーケンスの開始インデックスを返します。このインデックスを出力します。
  3. ファイルを保存します(Ctrl+S または Cmd+S)。

  4. ターミナルで変更したプログラムをコンパイルします。

    javac HelloJava.java
  5. コンパイルしたプログラムを実行します。

    java HelloJava

    次のような出力が表示されるはずです。

    Searching for pattern: 'Java' in string: 'Hello, Java! Welcome to Java programming.'
    Found match at index: 7
    Found match at index: 27

    この出力は、プログラムが入力文字列内で "Java" という単語の 2 つの出現箇所を正常に見つけ、各マッチの開始インデックスを出力したことを示しています。

これで、Pattern クラスと Matcher クラスを使用して文字列内の特定のパターンを見つけることに成功しました。次のステップでは、ユーザーが検索する文字列を入力できるようにして、このプログラムを対話型にします。

ユーザー入力で正規表現をテストする

この最後のステップでは、ユーザーが検索したい文字列を入力できるようにすることで、正規表現プログラムを対話型にします。これにより、プログラムがより柔軟になり、正規表現とユーザーインタラクションを組み合わせる方法がわかります。

「はじめての Java 実験」で使った Scanner クラスを使って、ユーザーからの入力を読み取ります。

  1. WebIDE エディタで HelloJava.java ファイルを開きます。

  2. 既存のコードを次のコードに置き換えます。

    import java.util.Scanner;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Define a simple regex pattern to match the word "Java"
            String regexPattern = "Java";
    
            // Create a Scanner object to read user input
            Scanner scanner = new Scanner(System.in);
    
            // Prompt the user to enter a string
            System.out.print("Enter the string to search within: ");
            String inputString = scanner.nextLine();
    
            // Compile the regex pattern
            Pattern pattern = Pattern.compile(regexPattern);
    
            // Create a Matcher object
            Matcher matcher = pattern.matcher(inputString);
    
            // Find and print the matches
            System.out.println("Searching for pattern: '" + regexPattern + "' in string: '" + inputString + "'");
    
            boolean found = false;
            while (matcher.find()) {
                System.out.println("Found match at index: " + matcher.start());
                found = true;
            }
    
            if (!found) {
                System.out.println("No match found.");
            }
    
            // Close the scanner
            scanner.close();
        }
    }

    変更点は次のとおりです。

    • import java.util.Scanner;Scanner クラスをインポートします。
    • Scanner scanner = new Scanner(System.in);:コンソールからの入力を読み取る Scanner オブジェクトを作成します。
    • System.out.print("Enter the string to search within: ");:ユーザーに文字列を入力するよう促します。
    • String inputString = scanner.nextLine();:ユーザーからの入力の全行を読み取り、inputString 変数に格納します。
    • boolean found = false; 変数と if (!found) ブロックを追加して、マッチが見つからない場合にメッセージを表示します。
    • scanner.close();:システムリソースを解放するために Scanner を閉じます。
  3. ファイルを保存します(Ctrl+S または Cmd+S)。

  4. ターミナルでプログラムをコンパイルします。

    javac HelloJava.java
  5. プログラムを実行します。

    java HelloJava
  6. プログラムはこれで文字列の入力を待ちます。「Java」という単語を含む(または含まない)文字列を入力し、Enter キーを押します。

    たとえば、次のように入力すると、

    Learning Java is fun!

    出力は次のようになります。

    Enter the string to search within: Learning Java is fun!
    Searching for pattern: 'Java' in string: 'Learning Java is fun!'
    Found match at index: 9

    次のように入力すると、

    Python is also great.

    出力は次のようになります。

    Enter the string to search within: Python is also great.
    Searching for pattern: 'Java' in string: 'Python is also great.'
    No match found.

これで、ユーザーが提供した文字列内のパターンを検索するために正規表現を使用する対話型の Java プログラムを成功させました。これは、正規表現が実際のアプリケーションでどのように使用されるかの実用的な例です。

まとめ

この実験では、まず Java の正規表現(regex)の基本を理解し、java.util.regex パッケージに焦点を当てました。正規表現は文字列のパターンマッチングと操作に強力なツールであり、主要なクラスは PatternMatcher であることを学びました。その後、単純な文字列を定義し、Pattern.compile() を使用して Pattern オブジェクトにコンパイルすることで、基本的な正規表現パターンの作成を練習し、Java プログラムで基本的な正規表現パターンを定義して出力する方法を実証しました。