【Java】Pattern.compile()メソッドの使い方を具体例でわかりやすく解説
java.util.regex パッケージに含まれる Pattern クラスは、正規表現をコンパイルした結果を表すクラスです。このクラスが持つ compile() メソッドは、正規表現を表す文字列を受け取り、その正規表現をコンパイルした Pattern オブジェクトを返します。
基本的な構文
compile() メソッドの最もシンプルな形式は、引数として正規表現の文字列を1つ受け取ります。
Pattern pattern = Pattern.compile(regex);
コンパイル済みの Pattern オブジェクトから matcher() メソッドを呼び出すことで Matcher オブジェクトを取得し、入力文字列とのマッチングを行います。これにより、同じ正規表現を何度も再利用できるため、パフォーマンス面でも有利です。
使用例:文字列に数字が含まれているか判定する
次の例では、ユーザーから入力された文字列に対して「数字(\d)」を検索する正規表現をコンパイルし、マッチの有無を確認しています。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CompileExample {
public static void main(String args[]) {
// 文字列の読み込み
Scanner sc = new Scanner(System.in);
System.out.println("Enter input string");
String input = sc.nextLine();
// 数字を検索する正規表現
String regex = "(\\d)";
// 正規表現のコンパイル
Pattern pattern = Pattern.compile(regex);
// コンパイルした正規表現の表示
System.out.println("Compiled regular expression: " + pattern.toString());
// Matcherオブジェクトの取得
Matcher matcher = pattern.matcher(input);
// マッチが存在するか確認
if (matcher.find()) {
System.out.println("Given String contains digits");
} else {
System.out.println("Given String does not contain digits");
}
}
}
実行結果
Enter input string hello my id is 1120KKA Compiled regular expression: (\d) Given String contains digits
このように、入力文字列「hello my id is 1120KKA」には数字が含まれているため、マッチが検出されています。
フラグを指定するcompile()メソッド
compile() メソッドには、第2引数として整数値のフラグを受け取るバリエーションもあります。フラグごとに任意の条件を指定でき、代表的なものとしては以下があります。
- CASE_INSENSITIVE: 大文字と小文字を区別せずにマッチングを行う
- MULTILINE: ^ および $ を行単位で扱う
- DOTALL: . が改行文字にも一致するようになる
たとえば CASE_INSENSITIVE を指定すると、正規表現のコンパイル時に大文字・小文字の違いが無視されます。
使用例:CASE_INSENSITIVEフラグでマッチ数を数える
次の例では、大文字小文字を区別しない設定で文字「t」を検索し、出現回数をカウントしています。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CompileExample {
public static void main(String args[]) {
// 大文字小文字を無視して正規表現をコンパイル
Pattern pattern = Pattern.compile("[t]", Pattern.CASE_INSENSITIVE);
// Matcherオブジェクトの取得
Matcher matcher = pattern.matcher("Tutorialspoint");
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("Number of matches: " + count);
}
}
実行結果
Number of matches: 3
「Tutorialspoint」という文字列には「T」「t」「t」の3つが含まれるため、CASE_INSENSITIVE フラグを付けることで合計3件のマッチが検出されました。フラグを指定しない場合、結果は2件になります。
まとめ
Pattern.compile() メソッドは、文字列として記述した正規表現を Pattern オブジェクトへ変換するための入り口となる重要なメソッドです。フラグを組み合わせることで、大文字小文字の無視や複数行モードなど、柔軟なマッチング制御が可能になります。正規表現を使った文字列処理を実装する際は、まずこのメソッドでパターンをコンパイルすることから始めましょう。
-
JavaのPattern.quote()メソッドとは?使い方をサンプルコード付きで解説
Javaのjava.util.regexパッケージには、文字シーケンスの中から特定のパターンを検索するためのさまざまなクラスが用意されています。このパッケージに含まれるPatternクラスは、正規表現をコンパイルした結果を表すクラスです。このクラスが提供するquote()メソッドは、文字列を引数として受け取り、その文字列と完全に一致するパターン文字列を返します。具体的には、指定された文字列の前後に\Qと\Eというエスケープシーケンスが追加され、正規表現のメタ文字がすべて無効化されます。ただし、元の文字列そのものの意味が変わることはありません。Pattern.quote()メソッドの基本動作qu
-
JavaのPattern.matcher()メソッドの使い方を実例で解説
Javaのjava.util.regexパッケージには、文字シーケンスの中から特定のパターンを検索するためのさまざまなクラスが用意されています。 このパッケージに含まれるPatternクラスは、正規表現をコンパイルした結果を表すクラスです。このクラスが提供するmatcher()メソッドは、入力文字列を表すCharSequenceオブジェクトを引数として受け取り、現在のPatternオブジェクトが表す正規表現と入力文字列を照合するためのMatcherオブジェクトを返します。 matcher()メソッドの基本的な流れ matcher()メソッドを使った正規表現マッチングは、一般的に以下の手順で行い