はじめに
この実験では、Java で文字列が正規表現に一致するかどうかをチェックする方法を学びます。まず、正規表現の基本を理解し、java.util.regex パッケージを使用して簡単なパターンを作成する方法を学びます。
次に、Pattern クラスと Matcher クラスを使ってマッチ操作を行います。最後に、ユーザー入力で正規表現パターンをテストするために学んだ知識を適用し、Java で文字列の検証と操作に正規表現を使用する実践的な経験を積みます。
基本的な正規表現パターンを作成する
このステップでは、正規表現 (regex) とは何か、および Java で基本的なパターンを作成する方法を理解します。
正規表現は、テキストの文字列のマッチングと操作に使用される強力なツールです。テキスト内のパターンを記述するためのミニ言語と考えてください。特定のテキストの検索、入力形式の検証 (メールアドレスや電話番号など)、パターンに基づくテキストの置換などのタスクに非常に役立ちます。
Java では、正規表現は java.util.regex パッケージによって扱われます。主に使用する 2 つのクラスは Pattern と Matcher です。
Pattern:このクラスはコンパイルされた正規表現を表します。正規表現文字列をPatternオブジェクトにコンパイルします。Matcher:このクラスは、Patternを解釈して入力文字列に対してマッチ操作を行うために使用されます。
基本的な正規表現パターンを定義して出力する簡単な Java プログラムを作成しましょう。
WebIDE エディタで
HelloJava.javaファイルが開いていない場合は、開きます。ファイルの内容全体を次のコードに置き換えます。
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()メソッドは正規表現文字列を返します。
ファイルを保存します (Ctrl+S または Cmd+S)。
次に、プログラムをコンパイルしましょう。WebIDE の下部にあるターミナルを開き、
~/projectディレクトリにいることを確認します。次のコマンドを実行します。javac HelloJava.javaエラーがなければ、
~/projectディレクトリにHelloJava.classファイルが作成されます。最後に、コンパイルされたプログラムを実行します。
java HelloJava次の出力が表示されるはずです。
Our regex pattern is: Javaこれにより、基本的な正規表現パターンが正常に定義され、コンパイルされたことが確認できます。次のステップでは、このパターンを使用して、与えられた文字列内のマッチを見つけます。
Pattern クラスと Matcher クラスを使用する
このステップでは、Pattern とともに Matcher クラスを使用して、与えられた入力文字列内でパターンの出現箇所を見つける方法を学びます。
前のステップで説明したように、Pattern クラスはコンパイルされた正規表現を表します。Matcher クラスは、そのコンパイルされたパターンを使用して特定の入力文字列に対して検索操作を実際に行うために使用します。
一般的な処理の流れは次のとおりです。
- 正規表現をコンパイルする:
Pattern.compile()を使用して正規表現文字列からPatternオブジェクトを作成します。 - Matcher を作成する:
Patternオブジェクトに対してmatcher()メソッドを呼び出し、検索したい入力文字列を渡してMatcherオブジェクトを取得します。 - マッチを実行する:
Matcherオブジェクトのメソッドを使用してマッチを見つけます。一般的なメソッドには、find()(次のマッチを見つける)とmatches()(入力文字列全体がパターンに一致するかどうかをチェックする)があります。
HelloJava.java プログラムを変更して、Matcher を使用してサンプル文の中から "Java" という単語を見つけましょう。
WebIDE エディタで
HelloJava.javaファイルを開きます。既存のコードを次のコードに置き換えます。
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()) { ... }:このループはMatcherのfind()メソッドを使用します。find()メソッドは、入力シーケンスの中でパターンに一致する次の部分シーケンスを見つけようとします。マッチが見つかった場合はtrueを返し、そうでない場合はfalseを返します。whileループはfind()がtrueを返す限り続きます。System.out.println("Found match at index: " + matcher.start());:ループ内で、マッチが見つかった場合、matcher.start()は入力文字列内でマッチした部分シーケンスの開始インデックスを返します。このインデックスを出力します。
ファイルを保存します(Ctrl+S または Cmd+S)。
ターミナルで変更したプログラムをコンパイルします。
javac HelloJava.javaコンパイルしたプログラムを実行します。
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 クラスを使って、ユーザーからの入力を読み取ります。
WebIDE エディタで
HelloJava.javaファイルを開きます。既存のコードを次のコードに置き換えます。
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を閉じます。
ファイルを保存します(Ctrl+S または Cmd+S)。
ターミナルでプログラムをコンパイルします。
javac HelloJava.javaプログラムを実行します。
java HelloJavaプログラムはこれで文字列の入力を待ちます。「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 パッケージに焦点を当てました。正規表現は文字列のパターンマッチングと操作に強力なツールであり、主要なクラスは Pattern と Matcher であることを学びました。その後、単純な文字列を定義し、Pattern.compile() を使用して Pattern オブジェクトにコンパイルすることで、基本的な正規表現パターンの作成を練習し、Java プログラムで基本的な正規表現パターンを定義して出力する方法を実証しました。



