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桁以下」という条件を満たさず除外されます。154・4587・478365は3~6桁の範囲内なので受け入れられます。4578952は7桁あり、上限の6桁を超えているため除外されます。
なお、数量詞には貪欲(Greedy)、控えめ(Reluctant/Lazy)、強欲(Possessive)といったバリエーションも存在します。これらを使い分けることで、より精密なパターンマッチングを実現できます。
-
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
-
【Java】正規表現の\Aメタ文字とは?文字列の先頭にマッチさせる方法を解説
\Aメタ文字とはJavaの正規表現におけるメタ文字「\A」は、入力文字列全体の先頭にマッチします。よく使われる「^」と似ていますが、「^」はMULTILINEモード有効時に各行の先頭にもマッチするのに対し、「\A」はモードに関係なく常に文字列全体の先頭だけにマッチする点が異なります。例1:文字列の先頭をマッチさせる次のJavaプログラムでは、パターン「\AHi」を使って、入力文字列の先頭に「Hi」という文字列があるかどうかを確認しています。import java.util.regex.Matcher; import java.util.regex.Pattern; public class