本文へスキップ
BecomeCoder
ブログ一覧コース一覧

正規表現のよく使うパターン一覧|メール・電話番号・日付の書き方

#正規表現#regex#チートシート#初心者

結論:正規表現の「よく使うパターン」は、文字クラス[ ])・量指定子(* + ? {n,m})・アンカー(^ $ \b)・グループ( ) |)という少数の部品の組み合わせでできています。 丸暗記するより、この部品の意味を1つずつブラウザで動かして確認したほうが、結果的に早く「自分で組み立てられる」ようになります。

まずは動くパターン集(コピペしてOK)

先に、実務でそのまま使える定番パターンを並べます。いずれも「文字列全体がその形かどうか」を調べる想定で ^$ で囲んであります。

半角数字のみ:       ^[0-9]+$
郵便番号(日本):     ^\d{3}-\d{4}$
時刻(HH:MM):        ^([01]\d|2[0-3]):[0-5]\d$
年月日:             ^\d{4}-\d{2}-\d{2}$
英数字のID:         ^[A-Za-z0-9_]{3,16}$
ざっくりメール:     ^[\w.+-]+@[\w-]+\.[\w.-]+$
ざっくりURL:        ^https?://[\w./?%&=-]+$
全角ひらがな:       ^[ぁ-ん]+$

これらは Become-Coder の regex-17: 定番パターン集 ― そのまま使えるレシピ にまとまっているレシピです。このレッスンはブラウザ上でパターンとテスト文字列を書き換えながらマッチ結果をその場で確認できる mode: browser の実行レッスンなので、まずは上のパターンをそのまま貼り付けて動かしてみてください。インストールも会員登録も不要です。

なお、メールアドレスやURLを「完全に正しく」検証しようとすると正規表現は非常に複雑になり、かえって実用的ではありません。実務では「明らかにおかしい入力を弾く」程度のざっくりしたパターンで十分なことが多く、最終的な正しさは実際に送信・アクセスして確かめるのが定石です。この考え方も regex-17 の中で解説されています。

メールアドレスの正規表現

上のレシピの ^[\w.+-]+@[\w-]+\.[\w.-]+$ を分解すると、次のような部品でできています。

\w(英数字とアンダースコア)や +(1回以上の繰り返し)の意味がまだあいまいな場合は、いきなりこの複雑なパターンから覚えようとせず、部品から順に確認するのがおすすめです。

電話番号・郵便番号の正規表現

日本の電話番号や郵便番号のように「数字とハイフンの組み合わせ」は、文字クラスと量指定子だけで十分表現できます。郵便番号なら ^\d{3}-\d{4}$(数字3桁 + ハイフン + 数字4桁)、固定電話なら市外局番の桁数がまちまちなので ^0\d{1,4}-\d{1,4}-\d{4}$ のように幅を持たせるのが現実的です。

「ちょうど何桁」「何桁から何桁まで」を指定する {n,m} の書き方は、regex-08: {n,m} ― 回数をきっちり指定する で、実際に桁数を変えながらマッチ・不一致を確認できます。\d{3}\d{3,4} でマッチする文字列がどう変わるかを自分の目で見ておくと、桁数指定で迷わなくなります。

日付・時刻の正規表現

年月日は ^\d{4}-\d{2}-\d{2}$、時刻は ^([01]\d|2[0-3]):[0-5]\d$ が定番です。時刻のパターンは一見複雑ですが、分解すると次の組み合わせにすぎません。

| で複数の候補をまとめて選ぶ書き方は regex-13: 選択 ― | で「AまたはB」を表す で、( ) で範囲をひとまとまりにする書き方は regex-12: グループ化 ― ( ) で複数の要素を束ねる で確認できます。この2つを組み合わせられるようになると、時刻のような「条件つきの数値範囲」も自分で組み立てられるようになります。

年月日から年・月・日をそれぞれ別々の値として取り出したい場合は (\d{4})-(\d{2})-(\d{2}) のように ( ) で囲むと、マッチした一部分だけを番号付きで取得できます。これは regex-14: キャプチャグループ ― マッチした一部を取り出す で扱っているテーマで、実際に日付の文字列から年・月・日が別々に取れる様子をブラウザで確認できます。

URL・IDの正規表現

URLをざっくり判定する ^https?://[\w./?%&=-]+$ は、https?? が「s があってもなくてもよい」(0回か1回)を表しています。この ? の使い方は regex-07: * + ? ― 繰り返しの基本3記号*+ とあわせて練習できます。

英数字だけのID・ユーザー名を「3〜16文字」のように長さ制限つきで判定したいときは ^[A-Za-z0-9_]{3,16}$ が使えます。[A-Za-z0-9_] の部分がよく分からない場合は、まず regex-04: 文字クラス ― [ ] でどれか1文字を指定する で範囲指定(A-Z のようなハイフンを使った書き方)を確認してから組み立てると理解が早いです。

つまずきやすいところ

正規表現を書き始めたばかりの人が高確率でつまずくポイントが2つあります。

いずれもコースの regex-01: 正規表現とは ― パターンで文字列を捕まえる から順番に進めば自然に押さえられるようになっている内容です。「なぜ思った通りにマッチしないのか」に一度ぶつかっておくと、以後のパターン作成がぐっと楽になります。

次に読む

← ブログ一覧に戻る