よく使う正規表現パターン

メール構文、URL、IPv4、UUID、日付、数値に関する実用的な正規表現の例を、各パターンが実際に何をチェックするかの注記付きで閲覧できます。

ブラウザ内でローカルに実行
ユースケース正規表現注記
メールアドレス ^[^\s@]+@[^\s@]+\.[^\s@]+$ 実用的な構文チェック。配信には検証が必要です。
HTTP または HTTPS URL ^https?:\/\/[^\s]+$ スキームをチェックし、空白を拒否します。完全な検証には URL パーサーを使用してください。
IPv4 アドレス ^(?:(?:25[0-5]|2[0-4]\d|1?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|1?\d?\d)$ 0 から 255 までのオクテットを受け付けます。
UUID バージョン 1–5 ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$ 標準のハイフン形式と RFC バリアントビットをチェックします。
ISO 形式の日付 ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$ YYYY-MM-DD の形をチェックしますが、月ごとの日数制限はチェックしません。
24時間形式 ^(?:[01]\d|2[0-3]):[0-5]\d$ 00:00 から 23:59 までの値を受け付けます。
16進数カラー ^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$ RGB、RRGGBB、RRGGBBAA 表記に対応しています。
セマンティック バージョン ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$ コア バージョンに加えて、任意のプレリリースとビルド メタデータに一致します。
符号付き整数 ^-?\d+$ オプションのマイナス記号を許可
小数 ^-?(?:\d+|\d*\.\d+)$ 整数と小数に対応し、.5 のような値も含みます。
URL スラッグ ^[a-z0-9]+(?:-[a-z0-9]+)*$ 小文字の ASCII 単語を単一のハイフンで区切ったもの。
HTML のようなタグ <\/?[A-Za-z][^>]*> 単純な抽出のみに便利です。HTML の解析には HTML パーサーを使用してください。
先頭または末尾の空白 ^\s+|\s+$ 両端の空白を除去する場合はグローバルフラグを使用してください。
空行 ^\s*$ 各行を個別に評価するにはマルチラインモードを使用してください。
隣接する重複単語 \b([A-Za-z]+)\s+\1\b 大文字小文字を無視する場合は大文字小文字を区別しないモードを使用してください。

移植性に関する注意

JavaScript、PCRE、Python、Java、.NET、Go、Ruby は正規表現の機能を完全には同じようには実装していません。後読み、名前付きグループ、Unicode プロパティ、所有量指定子、インラインモディファイアに依存する前に、対象エンジンを確認してください。

セキュリティ上重要な検証では、最初に入力を正規化し、明示的な長さ制限を適用し、データ形式に専用のパーサーがある場合はそれを使用してください。

よく使う正規表現パターンの使い方

フォーム、ログの 1 行、設定ファイルで確認することが多い値に向けた 15 個のパターンを載せています。メールアドレス、HTTP / HTTPS URL、IPv4 アドレス、UUID(バージョン 1〜5)、ISO 形式の日付、24 時間形式の時刻、16 進数カラー、セマンティックバージョン、符号付き整数、小数、URL スラッグ、HTML のようなタグ、先頭と末尾の空白、空行、隣接する重複単語です。

ページの本体はこの表だけで、入力欄も実行ボタンもありません。各行には、そのパターンが何を確認し、何を見逃すかを書いています。形式に一致することは実データの検証とは違います。日付の行は 2024-02-31 を受け付け、メールの行はそのアドレスに本当に届くかを知ることはできません。パターンは出発点として扱い、実際に動かすエンジンで試してください。

  1. 検索欄に入力するか、ページ内で / キーを押すと、用途・パターン・注記のいずれかで表を絞り込めます。
  2. 入力欄の下のカウンターで、15 行のうち何行が表示されているかを確認します。
  3. パターンのセルにあるコピーボタンを押すと、その正規表現だけがテキストとしてクリップボードに入ります。
  4. 採用する前に同じ行の注記を読んでください。許容するケースと取りこぼすケースが書かれています。
  5. サンプル文字列で試すなら正規表現テスター、言語向けに書き換えるなら正規表現コード生成を使ってください。

各パターンが確認する範囲と、確認しない範囲

ブラウザーで確認した挙動

IPv4 の行は 0.0.0.0 と 255.255.255.255 を受け付け、256.1.1.1、1.2.3、1.2.3.4.5 を拒否します。UUID の行はハイフン付きの形式、バージョン 1〜5、RFC バリアントの 8・9・a・b を要求するため、バージョン 6 と 7 の識別子は一致しません。セマンティックバージョンの行は 1.0.0、1.0.0-alpha.1、1.0.0+build.1 を受け付け、v1.0.0 と 01.0.0 は失敗します。

いくつかの行は意図的に緩くしています。日付の行が 2024-02-31 を通すのは、パターンが月ごとの日数を知らないためで、2024-13-01 は通りません。時刻の行は 2 桁を前提とするので 09:30 は一致し、9:30 は一致しません。整数の行は +5 を拒否し、小数の行は .5 を許して 5. を拒否し、スラッグの行はハイフン 1 個と小文字だけを許します。

検索・件数・コピー

絞り込みは行全体を対象にします。タイトルだけではありません。octet で IPv4 の行が注記から、^https で URL の行がパターンそのものから、blank で空行の行が見つかります。カウンターは常に 15 行を基準に表示し、フォーカス中の検索欄は Escape で空になり、タッチ画面ではクリアボタンが同じ働きをします。

行のコピーボタンがコピーするのは正規表現だけです。アンカーは含まれ、引用符は付かないので、そのままソースコードやテストファイル、検証ルールに貼り付けられます。用途と注記はページに残ります。これらは文脈であり、パターンの一部ではありません。

フラグとエンジンごとの違い

3 つの行は正しいフラグと組み合わせて初めて役に立ちます。先頭と末尾の空白の行は両端を削るためにグローバルフラグ、空行の行は ^ と $ を行ごとに評価するためにマルチラインモード、隣接する重複単語の行は The the を重複と見なすために大文字小文字を無視するフラグが必要です。

より大きな制約は移植性です。後読み、名前付きグループ、Unicode プロパティ、絶対量指定子は JavaScript、PCRE、Python、Java、.NET、Go、Ruby で同じようには実装されていません。このページのパターンを持ち出すと、書かれたエンジンの前提も一緒に付いてきます。移植先のドキュメントを確認し、自分のサービスが実際に受け取る文字列で動くテストに式を残してください。

最近使ったツール: