正規表現による文字列パターンマッチングの基本と電話番号検証

正規表現は、特定の文字列パターンに一致するかどうかを判定するための強力なツールです。以下では、基本的な構文とその実装例を紹介します。

基本的な文字クラスとプリ定義済み文字クラス

正規表現において、[abc] は a、b、c のいずれか1文字にマッチします。. は任意の1文字にマッチし、特殊なエスケープシーケンスも用意されています:

  • \d:数字(0–9)
  • \s:空白文字(スペース、タブなど)
  • \w:英数字またはアンダースコア([a-zA-Z0-9_]

Javaなどの言語ではバックスラッシュをエスケープする必要があるため、コード中では \\d のように記述します。

// 文字クラスの例
System.out.println("x".matches("[xyz]"));     // true
System.out.println("k".matches("[xyz]"));     // false

// プリ定義済みクラス
System.out.println("A".matches("."));         // true(任意の1文字)
System.out.println("AB".matches("."));        // false(2文字)

System.out.println("\t".matches("\\s"));      // true(空白文字)
System.out.println("Z".matches("\\S"));       // true(非空白文字)

System.out.println("5".matches("\\d"));       // true(数字)
System.out.println("_".matches("\\w"));       // true(単語構成文字)
System.out.println("あ".matches("\\w"));      // false(日本語は含まない)

System.out.println("@".matches("\\W"));       // true(非単語文字)

実用例:電話番号の形式検証

以下のルールに基づき、電話番号が有効かどうかを判定できます。

  • 固定電話
    • 市外局番:0で始まり、3~8桁の数字
    • オプションで「-」(0個または1個)
    • 加入者番号:1~9で始まり、5~20桁の数字
  • 携帯電話
    • 11桁の数字
    • 先頭は「1」
    • 2桁目は3~9のいずれか

この要件を満たす正規表現は次の通りです:

String regex = "(1[3-9]\\d{9})|(0\\d{2,7}-?[1-9]\\d{4,19})";
boolean isValid = phoneNumber.matches(regex);

タグ: 正規表現 Java 文字列処理 パターンマッチング

5月25日 15:54 投稿