Java
 Computer >> コンピューター >  >> プログラミング >> Java

【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 オブジェクトへ変換するための入り口となる重要なメソッドです。フラグを組み合わせることで、大文字小文字の無視や複数行モードなど、柔軟なマッチング制御が可能になります。正規表現を使った文字列処理を実装する際は、まずこのメソッドでパターンをコンパイルすることから始めましょう。

  1. JavaのPattern.quote()メソッドとは?使い方をサンプルコード付きで解説

    Javaのjava.util.regexパッケージには、文字シーケンスの中から特定のパターンを検索するためのさまざまなクラスが用意されています。このパッケージに含まれるPatternクラスは、正規表現をコンパイルした結果を表すクラスです。このクラスが提供するquote()メソッドは、文字列を引数として受け取り、その文字列と完全に一致するパターン文字列を返します。具体的には、指定された文字列の前後に\Qと\Eというエスケープシーケンスが追加され、正規表現のメタ文字がすべて無効化されます。ただし、元の文字列そのものの意味が変わることはありません。Pattern.quote()メソッドの基本動作qu

  2. JavaのPattern.matcher()メソッドの使い方を実例で解説

    Javaのjava.util.regexパッケージには、文字シーケンスの中から特定のパターンを検索するためのさまざまなクラスが用意されています。 このパッケージに含まれるPatternクラスは、正規表現をコンパイルした結果を表すクラスです。このクラスが提供するmatcher()メソッドは、入力文字列を表すCharSequenceオブジェクトを引数として受け取り、現在のPatternオブジェクトが表す正規表現と入力文字列を照合するためのMatcherオブジェクトを返します。 matcher()メソッドの基本的な流れ matcher()メソッドを使った正規表現マッチングは、一般的に以下の手順で行い