はじめに
この実験では、Java で文字列が正規表現に一致するかどうかをチェックする方法を学びます。まず、正規表現の基本を理解し、java.util.regex
パッケージを使用して簡単なパターンを作成する方法を学びます。
次に、Pattern
クラスと Matcher
クラスを使ってマッチ操作を行います。最後に、ユーザー入力で正規表現パターンをテストするために学んだ知識を適用し、Java で文字列の検証と操作に正規表現を使用する実践的な経験を積みます。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、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.compile()
を使用して正規表現文字列から Pattern
オブジェクトを作成します。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 プログラムで基本的な正規表現パターンを定義して出力する方法を実証しました。