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

Javaの正規表現「\d」とは?数字マッチングの基本と実用例をわかりやすく解説

Javaの正規表現における部分式(メタ文字)「\d」は、半角数字(0〜9)1文字にマッチするためのパターンです。「d」は「digit(数字)」を意味しており、文字列の中から数値を検索・抽出・検証したい場合に非常に便利な構文です。

なお、「\d」は文字クラス「[0-9]」と同じ意味を持ちます。Javaの文字列リテラル内で正規表現を記述する際は、バックスラッシュ自体がエスケープ文字として扱われるため、コード中では「\\d」のように2重にエスケープして記述する点に注意しましょう。

例1:文字列から数字パターンを検索する

次の例では、入力文字列の中から「数字 + 半角スペース + 24」というパターンに一致する箇所をカウントしています。

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

public class RegexExample {
    public static void main(String args[]) {
        String regex = "\\d 24";
        String input = "This is sample text 12 24 56 89 24";

        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);

        int count = 0;
        while (m.find()) {
            count++;
        }
        System.out.println("マッチした件数: " + count);
    }
}

実行結果

マッチした件数: 2

このプログラムでは、「12 24」「89 24」の2か所がパターン「\\d 24」(数字1文字+空白+24)に一致するため、結果は「2」と表示されます。

例2:ユーザー入力された10桁の電話番号を検証する

次の例では、量指定子「{10}」を組み合わせて、ユーザーが入力した値がちょうど10桁の数字であるかどうかをチェックします。電話番号などの入力値検証(バリデーション)でよく使われるテクニックです。

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

public class Test {
    public static void main(String args[]) {
        // 10桁の数字にマッチする正規表現
        String regex = "\\d{10}";

        Scanner sc = new Scanner(System.in);
        System.out.println("電話番号を入力してください(10桁の数字):");
        String input = sc.nextLine();

        // Patternオブジェクトの生成
        Pattern p = Pattern.compile(regex);
        // Matcherオブジェクトの生成
        Matcher m = p.matcher(input);

        if (m.find()) {
            System.out.println("OK");
        } else {
            System.out.println("入力エラー");
        }
    }
}

実行結果1(10桁の数字を入力した場合)

電話番号を入力してください(10桁の数字):
9848022338
OK

実行結果2(桁数が足りない場合)

電話番号を入力してください(10桁の数字):
545
入力エラー

まとめ

  • 「\d」は半角数字1文字(0〜9)にマッチするメタ文字で、「[0-9]」と同等です。
  • Javaのコード内では「\\d」と記述する必要があります。
  • 「\\d{10}」のように量指定子を組み合わせれば、特定の桁数の数字列を簡単に検証できます。
  • 全角数字やマルチバイト文字も対象にしたい場合は、フラグ「Pattern.UNICODE_CHARACTER_CLASS」を指定すると「\d」がUnicodeの数字にも対応します。
  1. Javaの正規表現「re*」メタ文字とは?使い方とサンプルコード解説

    Javaの正規表現におけるメタ文字「re*」(量指定子 *)は、直前の表現・部分式の0回以上の繰り返しにマッチします。つまり、直前の要素が1回も出現しない場合でもマッチ対象となる点が特徴です。 re*の基本的な動作 例えば、正規表現 aabc* の場合は、「aab」の後に「c」が0回以上続く文字列にマッチします。したがって、「aab」「aabc」「aabcc」など、いずれもマッチ対象になります。 例1:パターンに一致する件数を数える import java.util.regex.Matcher; import java.util.regex.Pattern; public class Re

  2. Java正規表現のメタ文字「.(ドット)」の使い方を徹底解説

    Javaの正規表現におけるメタ文字「.(ドット)」は、改行文字を除く任意の1文字にマッチする特殊な記号です。この記事では、ドットメタ文字の基本的な動作と、実際のコード例を使った具体的な使い方をわかりやすく解説します。 ドット(.)メタ文字の基本 正規表現のサブ式である「.」は、改行(\n)以外のあらゆる単一文字に一致します。英字・数字・記号・空白など、種類を問わず1文字としてカウントされるため、パターンの柔軟な指定に非常に便利です。 例1:任意の1文字とのマッチ数を数える 次のJavaプログラムでは、パターン「.」を使って入力文字列内の各文字がいくつマッチするかをカウントしています。空白も1文