java 正規表現にマッチする文字列が含まれているかを判定する

  • 作成日 2022.05.20
  • 更新日 2022.10.27
  • java
java 正規表現にマッチする文字列が含まれているかを判定する

javaで、正規表現にマッチする文字列が含まれているかを判定する手順を記述してます。

環境

  • OS windows11 home
  • java 17.0.2

手順

指定した正規表現にマッチする文字列が含まれているかを判定するには、「Pattern.compile」と「find」を使用します。

Pattern p = Pattern.compile("文字列");

Matcher m1 = p.matcher("文字列");

m1.find(); // 判定

実際に、使用してみます。

import java.util.regex.*;

public class App {
    public static void main(String[] args) throws Exception {

        String reg = "[0-9]{3}"; // 3文字の半角数字
        Pattern p = Pattern.compile(reg);

        Matcher m1 = p.matcher("12345");
        System.out.println(m1.find()); // true

        Matcher m2 = p.matcher("25");
        System.out.println(m2.find()); // false

        Matcher m3 = p.matcher("abcde");
        System.out.println(m3.find()); // false

        Matcher m4 = p.matcher("abc258def");
        System.out.println(m4.find()); // true

    }
}

判定されていることが確認できます。

見つかった位置の取得

見つかった最初や最後の位置は「start」や「end」を使用すれば取得することが可能です。
見つかった文字列を取得するには「group」を使用します。

import java.util.regex.*;

public class App {
    public static void main(String[] args) throws Exception {

        String reg = "[2-9]{3}"; // 3文字の2から9の半角数字
        Pattern p = Pattern.compile(reg);

        Matcher m1 = p.matcher("12345");
        System.out.println(m1.find()); // true

        System.out.println(m1.start()); // 1
        System.out.println(m1.end()); // 4
        System.out.println(m1.group()); // 234

    }
}

複数実行

findは実行するたびに、次の位置にある文字列を取得します。

import java.util.regex.*;

public class App {
    public static void main(String[] args) throws Exception {

        String reg = "[0-9]{3}"; // 3文字の2から9の半角数字
        Pattern p = Pattern.compile(reg);

        Matcher m1 = p.matcher("012345");
        System.out.println(m1.find()); // true

        System.out.println(m1.start()); // 0
        System.out.println(m1.end()); // 3
        System.out.println(m1.group()); // 012

        System.out.println(m1.find()); // true

        System.out.println(m1.start()); // 3
        System.out.println(m1.end()); // 6
        System.out.println(m1.group()); // 345


    }
}

範囲を超えると「false」が返ります。

import java.util.regex.*;

public class App {
    public static void main(String[] args) throws Exception {

        String reg = "[0-9]{3}"; // 3文字の2から9の半角数字
        Pattern p = Pattern.compile(reg);

        Matcher m1 = p.matcher("012345");

        System.out.println(m1.find()); // true

        System.out.println(m1.start()); // 0
        System.out.println(m1.end()); // 3
        System.out.println(m1.group()); // 012

        System.out.println(m1.find()); // true

        System.out.println(m1.start()); // 3
        System.out.println(m1.end()); // 6
        System.out.println(m1.group()); // 345

        System.out.println(m1.find()); // false
        
    }
}

「reset」を使用することで、最初の位置から判定することが可能です。

import java.util.regex.*;

public class App {
    public static void main(String[] args) throws Exception {

        String reg = "[0-9]{3}"; // 3文字の2から9の半角数字
        Pattern p = Pattern.compile(reg);

        Matcher m1 = p.matcher("012345");

        System.out.println(m1.find()); // true

        System.out.println(m1.start()); // 0
        System.out.println(m1.end()); // 3
        System.out.println(m1.group()); // 012

        System.out.println(m1.find()); // true

        System.out.println(m1.start()); // 3
        System.out.println(m1.end()); // 6
        System.out.println(m1.group()); // 345

        m1.reset();

        System.out.println(m1.find()); // true

        System.out.println(m1.start()); // 0
        System.out.println(m1.end()); // 3
        System.out.println(m1.group()); // 012
        
    }
}