正規表現は、特定の文字列パターンに一致するかどうかを判定するための強力なツールです。以下では、基本的な構文とその実装例を紹介します。
基本的な文字クラスとプリ定義済み文字クラス
正規表現において、[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);