Javaで正規表現で指定したパターンに、対象の文字列がマッチするかどうかを判定する方法

はじめに

こんにちは、新卒1年目の岡崎です。エキサイトホールディングス Advent Calendar 2023の7日目を担当します。
今回はJavaにおいて、正規表現で指定したパターンに、対象の文字列がマッチするかどうかを判定する方法を紹介します。

Stringクラスのmatchesメソッド

Stringクラスには、matchesメソッドが用意されています。これを使って、対象の文字列が指定した正規表現のパターンとマッチするかどうか判定することができます。

以下の実装は、郵便番号の形式になっているかどうか判定するサンプルコードです。

public class Main {
    public static void main(String[] args) throws Exception {
    String string = "111-1111";
        String pattern = "^[0-9]{3}-[0-9]{4}$";
        
        System.out.println(string.matches(pattern));
    }
}

結果

true

簡単な正規表現のパターンを指定し、そのパターンに対象の文字列がマッチするかどうかを判定することのみを行うなら、この方法で十分だと思います。
しかし、Stringクラスで用意されているmatchesメソッドでは、部分一致をすることはできません。

以下は、<div>が含むかどうか判定を行うサンプルコードです。

public class Main {
    public static void main(String[] args) throws Exception {
        String string = "<div>aaa</div>";
        String pattern = "<div>";
        
        System.out.println(string.matches(pattern));
    }
}

結果

false

Patternクラス・Matcherクラス

PatternクラスとMatcherクラスを使う方法もあります。

先ほどと同様に、郵便番号の形式になっているかどうか判定するサンプルコードを以下に示します。

public class Main {
    public static void main(String[] args) throws Exception {
        String string = "111-1111";
        String regex = "^[0-9]{3}-[0-9]{4}$";
        
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(string);
        
        System.out.println(matcher.matches());
    }
}

結果

true

Patternクラスでパターンを読み込ませて、Matcherクラスでマッチするかどうか判定する方法です。

次のように繋げて記述することもできます。

public class Main {
    public static void main(String[] args) throws Exception {
        String string = "111-1111";
        String regex = "^[0-9]{3}-[0-9]{4}$";
        
        Boolean isMatch = Pattern.compile(regex).matcher(string).matches();
        
        System.out.println(isMatch);
    }
}

Matcherクラスに用意されているメソッドの一つに、find()というメソッドがあります。このメソッドでは、部分一致の判定を行うことができます。

以下は、<div>が含むかどうか判定を行うサンプルコードです。

public class Main {
    public static void main(String[] args) throws Exception {
        String string = "<div>aaa</div>";
        String pattern = "<div>";
        
        Boolean isMatch = Pattern.compile(pattern).matcher(string).find();
        
        System.out.println(isMatch);
    }
}

結果

true

Matcherクラスでは、上記のような部分一致の判定の他にも、マッチした部分の文字列を抜き出したり、置換を行ったりすることもできます。詳しくは公式ドキュメントをご覧ください。

最後に

Java正規表現で指定したパターンに、対象の文字列が一致するかどうかを判定する方法を2つ紹介しました。ここまで読んでいただきありがとうございました。