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

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

javaで、指定した範囲内に正規表現にマッチする文字列が含まれているかを判定する手順を記述してます。「Pattern.compile」と「region」で可能です。

環境

  • OS windows11 home
  • java 19.0.1

手順

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

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

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

m1.region(開始位置 0から,終了位置 最終位置のより1プラス);

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("abcde12345");
        m1.region(6, 10);
        System.out.println(m1.find()); // true

        Matcher m2 = p.matcher("abcde12345");
        m2.region(0, 4);
        System.out.println(m1.find()); // false

        Matcher m3 = p.matcher("abcde12345");
        m3.region(6, 9);
        System.out.println(m1.find()); // false

    }
}

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

範囲を超える

範囲を超えた場合は「IndexOutOfBoundsException」が発生します。

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("abcde12345");
        m1.region(6, 11);
        // Exception in thread "main" java.lang.IndexOutOfBoundsException: end
        // at java.base/java.util.regex.Matcher.region(Matcher.java:1514)
        // at App.main(App.java:10)

    }
}