正規表現で数字を扱うパターンは、バリデーション・ログ解析・データ抽出など非常に多くの場面で必要となります。
「数字のパターンはどう書けばいいの?」「桁数を指定するには?」「小数点の数字にも対応したい」という疑問を持つ方に向けて、この記事では数字に関する正規表現パターンを詳しく解説していきます。
正規表現の数字パターンは\dまたは[0-9]が基本であり量詞と組み合わせて桁数指定が可能になる
それではまず、正規表現における数字パターンの基本について解説していきます。
正規表現で数字を表す最も基本的な記法は「\d」または「[0-9]」です。
どちらも「0から9までの数字1文字」にマッチするパターンであり、量詞(+・*・{n}など)と組み合わせることで様々な数字パターンを表現できます。
\dと[0-9]はほとんどの場合で同じ動作をしますが、Unicodeをサポートする一部の言語では\dが全角数字やアラビア数字など広範な数字にマッチするケースがあります。
ASCII数字のみを対象としたい場合は[0-9]の方が明示的で安全な選択です。
基本的な数字パターンの一覧
続いては、よく使われる数字パターンの種類と書き方について確認していきます。
| パターン | 意味 | マッチ例 |
|---|---|---|
| \d | 数字1文字 | 0〜9の任意の1文字 |
| \d+ | 1桁以上の数字 | 1・12・123・9999など |
| \d* | 0桁以上の数字 | 空文字・1・123など |
| \d{3} | ちょうど3桁の数字 | 123・456・789など |
| \d{3,5} | 3〜5桁の数字 | 123・1234・12345にマッチ |
| \d{3,} | 3桁以上の数字 | 123・1234・12345678など |
| [0-9] | 0〜9の数字1文字(\dと同義) | ASCII数字のみ確実にマッチ |
| [1-9]\d* | 先頭がゼロでない正の整数 | 1・10・100・9999など |
実用的な数字パターンの例
続いては、実際のユースケースで活用できる数字パターンの具体例について確認していきます。
整数・負の数・小数点を含む数値
整数・負の数・小数のパターン例
正の整数のみ:^\d+$
負の数を含む整数:^-?\d+$(先頭の-が0回または1回)
小数点を含む数値:^-?\d+(\.\d+)?$(整数部必須・小数部は任意)
小数のみ(整数部なし):^-?\.\d+$ (.123のような形式)
汎用的な数値:^-?\d*\.?\d+$ (整数・小数・先頭ドットに対応)
電話番号・郵便番号・日付のパターン
数字を使った実用パターン例
日本の固定電話番号:^\d{2,4}-\d{2,4}-\d{4}$
日本の携帯電話番号:^0[789]0-\d{4}-\d{4}$
郵便番号(ハイフンあり):^\d{3}-\d{4}$
日付(YYYY-MM-DD):^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
年(西暦4桁):^(19|20)\d{2}$ (1900〜2099年)
数値の範囲指定パターン
正規表現で数値の範囲を指定する場合は注意が必要です。
正規表現は文字列パターンのマッチングツールであるため、「100以上200以下」のような数値範囲の直接指定は正規表現だけでは困難です。
このような場合は正規表現で数字文字列を抽出した後、プログラム側で数値比較を行うアプローチが適切です。
どうしても正規表現だけで表現したい場合は、1桁・2桁・3桁の範囲を選択(|)で組み合わせる方法もありますが、パターンが非常に複雑になります。
数字パターンのよくある間違いと注意点
続いては、数字パターンでよく起こる間違いと注意点について確認していきます。
先頭・末尾のアンカーを忘れない
「\d{3}」だけでは「12345」という5桁の数字にも「3桁の数字を含む」としてマッチしてしまいます。
「ちょうど3桁の数字のみ」を検索したい場合は「^\d{3}$」とアンカーを付けることが重要です。
小数点のエスケープを忘れない
小数点を含む数値パターンを記述する際、「.」はエスケープなしでは「任意の1文字」を意味するため「\.」とエスケープする必要があります。
「\d+.\d+」ではなく「\d+\.\d+」が正しい小数点を含む数値のパターンです。
まとめ
正規表現の数字パターンは\dまたは[0-9]が基本であり、量詞と組み合わせることで桁数指定・整数・小数・電話番号・日付など様々な数値パターンを表現できます。
アンカー(^・$)の活用と小数点のエスケープを忘れないことが、正確な数字パターンマッチングの基本となります。
数値の範囲指定は正規表現と数値比較を組み合わせるアプローチが実用的であり、複雑な数値検証はプログラム側のロジックと併用することを検討してみてください。
実際のコードや正規表現チェッカーで試しながら、数字パターンの使い方を身につけていただければと思います。