TToolspot
実務で必ず使う正規表現チートシート - 23パターンと検証のコツ

実務で必ず使う正規表現チートシート - 23パターンと検証のコツ

Toolspot公開日: 2026/4/25

正規表現は「読めるけど書けない」「動くけど合っているか不安」が二大悩み。本記事では、実務でそのまま使える23パターンを 用途別×言語別の落とし穴つき で整理します。コピペして使う前に、必ず正規表現テスターで実データを通して確認することをおすすめします。

基本構造をまずおさらい

記号 意味
^ $ 行頭・行末
. 任意の1文字(改行除く)
* + ? 0回以上・1回以上・0または1回
{n,m} n〜m回繰り返し
\d \w \s 数字・単語文字・空白
[abc] [^abc] 文字クラス・否定
(...) (?:...) キャプチャ・非キャプチャ
| OR

入力バリデーション系

1. メールアドレス(実用版)

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

:RFC完全準拠の正規表現は数千文字になります。実務では「@とドットを含む形式」程度のチェックで十分。最終的なメール到達確認はバリデーションメール送信 で行います。

2. 日本の電話番号

^0\d{1,4}-\d{1,4}-\d{4}$

国際形式を含めるなら ^(\+81|0)\d{1,4}-?\d{1,4}-?\d{4}$

3. 郵便番号(日本)

^\d{3}-?\d{4}$

4. URL(http/httpsのみ)

^https?:\/\/[^\s/$.?#].[^\s]*$

5. パスワード(英大小・数字・記号 8文字以上)

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,}$

否定先読み(?=...)で4条件を同時に満たす形。詳しくはパスワード生成ツールで生成しつつ確認できます。

日付・時刻系

6. YYYY-MM-DD 形式の日付

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

:これは「31/2」のような存在しない日付も通る形式チェックです。実在性チェックは Date オブジェクトで やるのが正解。

7. HH:MM:SS 形式の時刻

^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$

8. ISO 8601 日時

^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$

数値系

9. 整数(負の値含む)

^-?\d+$

10. 小数(カンマ区切り対応)

^-?\d{1,3}(?:,\d{3})*(?:\.\d+)?$

11. 百分率(%付き)

^\d{1,3}(?:\.\d+)?%$

テキスト処理系

12. 前後の空白を削除(trim相当)

str.replace(/^\s+|\s+$/g, '')

13. 連続する空白を1つに

str.replace(/\s+/g, ' ')

14. 改行で分割

str.split(/\r?\n/)

\nだけだとWindows形式 \r\n の行末で \r が残ります。

15. HTMLタグの除去(簡易版)

str.replace(/<[^>]+>/g, '')

重要:本格的なHTMLサニタイズには DOMPurify 等の専用ライブラリを使うこと。正規表現はXSS対策には不十分です。

抽出・パース系

16. URL中のクエリパラメータ抽出

[?&]([^=&]+)=([^&]*)

17. メールのドメイン部分

@([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})$

18. ファイル名と拡張子の分離

^(.+?)\.([^.]+)$

19. 日本のクレジットカード番号(Visa/Master/JCB/AMEX)

^(?:4\d{12}(?:\d{3})?|5[1-5]\d{14}|35\d{14}|3[47]\d{13})$

言語ごとの注意点

言語 エスケープ 補足
JavaScript /regex/ または new RegExp(...) \ は文字列内では \\
Python r"regex"(raw string) re.compileが高速
Java "regex"\\d のように二重エスケープ) Pattern.compile使用
PHP '/regex/' デリミタが必要
Go バッククォート文字列推奨 regexpパッケージ
MySQL REGEXP 演算子 バックスラッシュは \\

デバッグ・検証のコツ

コツ1:境界条件を必ず試す

  • 空文字 ""
  • 1文字だけ
  • 想定の最大長
  • 全角/半角の混在
  • 改行・タブを含む文字列

コツ2:欲張らない

動作する最小の表現」が正解です。.* を多用すると、思わぬ範囲までマッチしたり、パフォーマンス問題(バックトラック爆発)が起きます。

# ✗ 悪い例(バックトラック爆発の可能性)
^(a+)+$

# ○ 良い例
^a+$

コツ3:可読性を捨てない

正規表現は「動けば良い」という気持ちで書くと、3ヶ月後の自分が読めません。

  • 長くなるならコメント付きモード(x フラグ)を使う
  • 複雑なロジックは正規表現1本にせず、複数ステップに分ける
  • 名前付きキャプチャ (?<year>\d{4}) で意図を明示

まとめ - 「動くこと」と「正しいこと」を区別する

正規表現は強力ですが、「動く」と「正しい」は別物 です。

  • バリデーションは正規表現で形式チェック → 仕様の本質チェックは別途実装
  • HTMLパースには使わない、専用パーサを使う
  • 必ず境界条件で検証する
  • 複雑になりすぎたら分解する

実データで動作確認するときは正規表現テスターを使うとマッチ範囲が一目でわかります。JSONデータの整形・差分確認ならJSON整形ツールテキスト差分ツールも合わせて使えます。

関連ツール