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

Javaの正規表現「re{n}」メタ文字の使い方を解説

re{n}メタ文字とは

Javaの正規表現における「re{n}」は、直前の表現(部分式)がちょうどn回連続して出現する箇所にマッチさせるための量指定子(メタ文字)です。

例えば「to{1}」と指定した場合、「t」の直後に「o」が1回だけ続く部分にマッチします。「o{3}」なら「ooo」というように、指定した回数ぴったりの繰り返しのみが対象となります。

例1:マッチ回数をカウントする

次のプログラムでは、文字列「Welcome to Tutorialspoint」の中に「to{1}」(tの直後にoが1回)というパターンが何回マッチするかを数えています。

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
    public static void main( String args[] ) {
        String regex = "to{1}";
        String input = "Welcome to Tutorialspoint";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);
        int count = 0;
        while(m.find()) {
            count++;
        }
        System.out.println("Number of matches: "+count);
    }
}

実行結果

Number of matches: 2

この例では「to」という並びが2箇所で見つかるため、マッチ数は「2」と出力されます。

例2:2桁の年齢入力を検証する

次のJavaプログラムは、ユーザーから年齢を入力してもらい、その値が2桁の数字のみであるかどうかを「\d{2}」パターンで判定します。

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
    public static void main( String args[] ) {
        String regex = "\\d{2}";
        System.out.println("Enter your age:");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);
        if(m.matches()) {
            System.out.println("Age value accepted");
        } else {
            System.out.println("Age value not accepted");
        }
    }
}

実行結果1:2桁の数字を入力した場合

Enter your age:
25
Age value accepted

「25」は2桁の数字なので、パターンに一致し、入力値として受け付けられます。

実行結果2:4桁の数字を入力した場合

Enter your age:
2252
Age value not accepted

「2252」は4桁のため、「ちょうど2桁」という条件から外れ、受け付けられません。

実行結果3:数字以外を入力した場合

Enter your age:
twenty
Age value not accepted

「twenty」のように文字列が含まれる場合は「\d{2}」にマッチしないため、同様に拒否されます。

まとめ

「re{n}」を使うことで、直前の文字やパターンの厳密な繰り返し回数を指定できます。桁数の固定されたコードや郵便番号などの入力チェックに特に便利なメタ文字ですので、ぜひ活用してみてください。

  1. Javaの正規表現における$(ドル)メタ文字の使い方

    正規表現におけるサブ表現(メタ文字)「$」は、行の末尾に一致します。パターンの最後に「$」を置くことで、指定した文字列で終わるテキストだけをマッチさせることができます。なお、デフォルトでは「$」は入力全体の末尾に一致しますが、Pattern.MULTILINEフラグを有効にすると、行区切り文字(改行など)の直前にも一致するようになります。例1:行末の一致を確認する次のJavaプログラムでは、「Tutorialspoint」という文字列で終わる入力に対して、正規表現「Tutorialspoint$」が何回一致するかを数えています。import java.util.regex.Matcher; i

  2. Java正規表現のメタ文字「^(キャレット)」の使い方を解説

    正規表現におけるサブ式(メタ文字)「^」は、行の先頭にマッチします。この記号を正規表現の中で使用すると、入力文字列の中でその後に続くパターンが行頭から始まる場合に一致とみなされます。 例1:行頭のパターンにマッチするか確認する 次のサンプルコードでは、入力文字列が「Hi how are you」というフレーズで始まっているかどうかを「^」を使って判定しています。 import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexExample { public static void m