正規表現(Regular Expression、略してRegex)は、文字列のパターンを表現するための特殊な記法です。テキストの検索、置換、バリデーションなど、プログラミングのあらゆる場面で活躍します。最初は記号の羅列に見えて難しく感じますが、基本を押さえれば強力な武器になります。

正規表現とは

正規表現は「文字列のパターンマッチング」を行うための記法です。例えば「3桁の数字の後にハイフンがあり、その後に4桁の数字が続く」というパターンを\d{3}-\d{4}と表現できます。

正規表現が使える場面は非常に多岐にわたります。

  • 入力チェック - メールアドレスや電話番号の形式を検証
  • テキスト検索 - 特定のパターンに一致する文字列を検索
  • テキスト置換 - パターンに一致する部分をまとめて置換
  • データ抽出 - ログファイルから特定の情報を抽出

基本メタ文字一覧

正規表現で特別な意味を持つ文字(メタ文字)を覚えましょう。

メタ文字意味マッチする文字列
.任意の1文字a.cabc, aXc, a1c
*直前の文字が0回以上ab*cac, abc, abbc
+直前の文字が1回以上ab+cabc, abbc(acは不可)
?直前の文字が0回または1回colou?rcolor, colour
[]文字クラス(いずれか1文字)[abc]a, b, c
()グループ化(ab)+ab, abab
{n}直前の文字がちょうどn回a{3}aaa
{n,m}直前の文字がn回以上m回以下a{2,4}aa, aaa, aaaa
^行の先頭^Hello行頭のHello
$行の末尾world$行末のworld
\d数字([0-9]と同じ)\d+123, 45
\w英数字とアンダースコア\w+hello, user_1
\s空白文字\s+スペース、タブ

よく使うパターン10選

実務でよく使われる正規表現パターンを厳選して紹介します。コピペしてそのまま使えます。

1. メールアドレス

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}

一般的なメールアドレスの形式にマッチします。user@example.comのようなパターンを検証できます。

2. 電話番号(日本の形式)

0\d{1,4}-\d{1,4}-\d{3,4}

03-1234-5678090-1234-5678などの日本の電話番号形式にマッチします。

3. 郵便番号

\d{3}-\d{4}

100-0001のような日本の郵便番号形式にマッチします。シンプルですが実用的です。

4. URL

https?://[\w!?/+\-_~;.,*&@#$%()='[\]]+

http://またはhttps://で始まるURLにマッチします。

5. IPアドレス(IPv4)

\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b

192.168.1.1のようなIPv4アドレスの形式にマッチします。

6. 日付(YYYY-MM-DD)

\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])

2024-01-15のようなISO 8601形式の日付にマッチします。

7. 全角カタカナのみ

^[\u30A0-\u30FF]+$

フォームのフリガナ入力チェックなどに使えます。

8. 全角ひらがなのみ

^[\u3040-\u309F]+$

ひらがなのみの入力を検証したい場合に使います。

9. HTMLタグ

<("[^"]*"|'[^']*'|[^'">])*>

HTMLタグにマッチします。タグの除去などに使えますが、複雑なHTMLの解析にはパーサーを使うことを推奨します。

10. 半角英数字のみ

^[a-zA-Z0-9]+$

ユーザーIDやパスワードの形式チェックに使えるシンプルなパターンです。

フラグの意味と使い方

正規表現にはフラグ(修飾子)を付けることで、マッチの挙動を変更できます。

フラグ名前効果
gglobal最初のマッチだけでなく、すべてのマッチを検索
icase-insensitive大文字・小文字を区別しない
mmultiline^$が各行の先頭・末尾にマッチ

JavaScriptでの使用例を見てみましょう。

// gフラグ: すべてのマッチを取得
const text = "apple banana apple cherry";
const matches = text.match(/apple/g);
// → ["apple", "apple"]

// iフラグ: 大文字小文字を無視
"Hello".match(/hello/i);
// → ["Hello"]

// mフラグ: 複数行モード
const multiline = "line1\nline2\nline3";
multiline.match(/^line/gm);
// → ["line", "line", "line"]

正規表現を書くコツ

  • シンプルに始める - まずは大まかなパターンを書き、徐々に厳密にしていく
  • テスターを活用する - いきなりコードに書くのではなく、テスターで動作確認する
  • コメントを残す - 複雑な正規表現にはコメントで意図を説明する
  • 完璧を求めすぎない - 100%のバリデーションは正規表現だけでは難しい。ある程度の精度で十分な場合も多い

正規表現テスターで試してみましょう

正規表現テスターを使ってみる

まとめ

正規表現は最初こそ取っつきにくいですが、基本メタ文字とよく使うパターンを覚えるだけで実務で大いに役立ちます。この記事で紹介したパターン10選をベースに、実際にテスターで動作を確認しながら理解を深めてみてください。

特にメールアドレスや電話番号のバリデーションは、Webフォームの開発で頻繁に使うパターンです。まずはこれらをマスターして、正規表現に慣れていきましょう。