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

Java正規表現の数量詞(Quantifier)とは?種類と使い方をサンプル付きで解説

正規表現を構築する際、特定の文字や文字クラスの出現回数を指定したい場面は多くあります。そのような場合に活用できるのが数量詞(Quantifier)です。数量詞を使うことで、「0回以上の繰り返し」や「ちょうどn回」など、繰り返しパターンを簡潔かつ柔軟に記述できます。

下記の表は、Javaの正規表現(java.util.regex)がサポートする主な数量詞をまとめたものです。

数量詞説明使用例
re*0回以上の出現にマッチ[0-9]*:0個以上の数字にマッチ
re?1回、またはまったく出現しない場合にマッチ[0-9]?:0個または1個の数字にマッチ
re+1回以上の出現にマッチ[0-9]+:1個以上の数字にマッチ
re{n}ちょうどn回の出現にマッチ[0-9]{3}:3桁の数字にマッチ
re{n}n回以上の出現にマッチ[0-9]{3}:3桁以上の数字にマッチ
re{n,m}n回以上m回以下の出現にマッチ[0-9]{2,5}:2桁~5桁の数字にマッチ

サンプルコード

次の例では、{3,6}という数量詞を使って「3桁以上6桁以下の数字」と完全一致する文字列だけを受け入れるプログラムを示します。キーボードから5つの文字列を入力し、正規表現にマッチした値のみを出力します。

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Example {
    public static void main(String args[]) {
        String regex = "[0-9]{3,6}";
        Scanner sc = new Scanner(System.in);
        System.out.println("5つの入力文字列を入力してください:");
        String input[] = new String[5];
        for (int i = 0; i < 5; i++) {
            input[i] = sc.nextLine();
        }
        // Patternオブジェクトの生成
        Pattern p = Pattern.compile(regex);
        System.out.println("マッチした値:");
        for (int i = 0; i < 5; i++) {
            // Matcherオブジェクトの生成
            Matcher m = p.matcher(input[i]);
            if (m.matches()) {
                System.out.println(m.group() + ": accepted");
            }
        }
    }
}

実行結果

5つの入力文字列を入力してください:
12
154
4587
478365
4578952
マッチした値:
154: accepted
4587: accepted
478365: accepted

実行結果のポイント

このプログラムでは、入力された各文字列に対してmatches()メソッドで正規表現との完全一致を判定しています。

  • 12は2桁のため、「3桁以上6桁以下」という条件を満たさず除外されます。
  • 1544587478365は3~6桁の範囲内なので受け入れられます。
  • 4578952は7桁あり、上限の6桁を超えているため除外されます。

なお、数量詞には貪欲(Greedy)、控えめ(Reluctant/Lazy)、強欲(Possessive)といったバリエーションも存在します。これらを使い分けることで、より精密なパターンマッチングを実現できます。

  1. Javaの正規表現における\wメタ文字の使い方を徹底解説

    Javaの正規表現で使用されるサブ式(メタ文字)「\w」は、単語構成文字にマッチします。具体的には、半角英小文字(a〜z)、半角英大文字(A〜Z)、および半角数字(0〜9)が該当します。サンプルコード1:パターンにマッチした回数をカウントする次の例では、正規表現「\w to」を使い、入力文字列の中にこのパターンが何回出現するかをカウントして表示します。import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexExample { public static void main(St

  2. 【Java】正規表現の\Aメタ文字とは?文字列の先頭にマッチさせる方法を解説

    \Aメタ文字とはJavaの正規表現におけるメタ文字「\A」は、入力文字列全体の先頭にマッチします。よく使われる「^」と似ていますが、「^」はMULTILINEモード有効時に各行の先頭にもマッチするのに対し、「\A」はモードに関係なく常に文字列全体の先頭だけにマッチする点が異なります。例1:文字列の先頭をマッチさせる次のJavaプログラムでは、パターン「\AHi」を使って、入力文字列の先頭に「Hi」という文字列があるかどうかを確認しています。import java.util.regex.Matcher; import java.util.regex.Pattern; public class