正規表現パターン・ライブラリ

60以上のすぐに使える正規表現パターン。検索、コピー、オンラインでテストします。

このライブラリについて

これはカテゴリ別に整理された60以上の一般的に使用される正規表現パターンのキュレーション、検索可能なコレクションです。各パターンには、説明、式自体、一致の例が含まれます。パターンをクリックしてコピーするか、クイックテストパネルを使ってこのページから直接テキストに対して検証します。

すべてはブラウザ内で実行されます · パターンとテストテキストはどこにも送信されません。これらのパターンをJavaScript、Python、PHP、Java、Go、または正規表現をサポートする任意の言語で使用してください。フラグとキャプチャグループによる高度なテストには、正規表現テスター&デバッガーをお試しください。

仕組み

  1. 閲覧または検索: カテゴリ(検証、抽出、フォーマット)でパターンを閲覧するか、名前またはユースケースで検索します。
  2. パターンをプレビュー: 各エントリには、正規表現、それがキャプチャするものの説明、一致を含む例の入力、制限が表示されます。
  3. データでテスト: 自分のテスト文字列を入力して、パターンが期待どおりにキャプチャすることを確認します。
  4. 使用するためにコピー: コード用にJavaScript、Python、またはPOSIX形式で正規表現パターンをコピーします。

なぜ正規表現ライブラリを使うのか?

正規表現をゼロから書くのは時間がかかりエラーが発生しやすいです。メールの検証、URLのマッチング、電話番号の抽出、クレジットカードの検出、日付の解析、IPアドレスの検証によく必要なパターンには実績のある解決策がありますが、信頼できるバージョンを見つけるには、Stack Overflowを検索し、正確性を評価し、エッジケースを確認する必要があります。このライブラリは、文書化されたエッジケース、既知の制限、具体的なテストケースとともに検証済みのパターンをまとめています。自分で書くより速く、テストせずにランダムなインターネットソースからコピー&ペーストするより信頼性が高いです。

パターンカテゴリ

正規表現はどこから来たのか

「正規集合」という数学的概念は、スティーブン・コール・クリーネが1951年に RAND 研究覚書 Representation of Events in Nerve Nets and Finite Automata で形式化しました。このページの * 演算子は、彼の名誉のために今でも クリーネ・スター と呼ばれています。ケン・トンプソン は、1968年6月の Communications of the ACM の論文 Programming Techniques: Regular Expression Search Algorithm で理論をアルゴリズムに変え、ベル研究所の QED エディタで最初の regex 実装を出荷しました。1973年までに、同じエンジンが ed を動かし、その後 grep(字義通りの展開は「globally search for regular expression and print」)、sedawk を動かしました。ラリー・ウォール の Perl(1987)、特に Perl 5(1994)は、名前付きグループ、ルックアラウンド、非貪欲量指定子、Unicode 処理を追加し、これらは PCRE として知られる事実上の方言となり、フィリップ・ヘイゼル が 1997 年に C にライブラリとして移植しました。

エンジン方言とそれらの間で変わるもの

JavaScript できれいに動くパターンが Go では静かに失敗し、POSIX では完全に拒否されることがあります。開発者が出会う可能性が最も高い5つの方言:

壊滅的バックトラックと ReDoS

主流言語のほとんどの regex エンジン(PCRE、Java、JS V8 / SpiderMonkey / JavaScriptCore、Python re、.NET)は バックトラック エンジンです。(a+)+ のような入れ子になった量指定子を持つパターンがほぼ一致する入力に当たると、エンジンはあきらめる前に指数関数的な数の代替パスを試すことができます。これは 壊滅的バックトラック であり、OWASP がカタログ化した ReDoS(Regular expression Denial of Service)攻撃クラスの基礎です。

Stack Overflow、2016年7月20日: 先頭と末尾の空白をトリムするように設計されたパターンが、20 000 個の連続した空白文字を含む質問本文に適用され、リクエストごとに 11 分の CPU を消費し、サイトを 34 分間応答不能にしました。公式 Stack Status ブログの事後分析は、トリム regex をネイティブ文字列トリムに置き換えることを推奨しました。

Cloudflare、2019年7月2日: 入れ子量指定子パターン .*(?:.*=.*) を含む WAF ルールがグローバルに展開され、すべてのエッジサーバーで 27 分間 CPU を 100% 消費し、公共インターネットの大部分をオフラインにしました。Cloudflare のブログの事後分析は、再発防止のために Rust の regex クレート(RE2 ベースの線形時間エンジン)への切り替えを評価しました。

防御的な教訓:入れ子量指定子を避ける((a+)+(a*)*(a|aa)+);攻撃者制御の入力に対する \s+$ スタイルのトリムを避ける;PCRE では原子グループ (?>...) または所有量指定子 a++ を優先する;高スループットサービスでは RE2 ベースのエンジンを検討する。

メール、URL、電話、日付、クレジットカード:regex を使わない場合

メール。RFC 5322(2008年10月)の完全な文法は、約 3 000 文字の regex にコンパイルされます。<input type="email"> 検証のための W3C HTML5 仕様は、はるかに短い「これはもっともらしくメールか」regex を使用しており、これはクライアント側のヒントの正しい出発点です。RFC 6531(2012年2月)は 用户@example.com のような非 ASCII アドレスを許可し、ASCII のみの regex はこれを誤って拒否します。RFC 6532 以降の業界コンセンサス:regex でメールを検証せず、代わりに検証メールを送信する。

URL。RFC 3986(2005年1月)は URI 汎用構文仕様ですが、WHATWG URL Living Standard はブラウザが実際に受け入れるものに一致するように意図的に逸脱しています。簡単な視覚的チェック以上のことには、regex ではなく JavaScript の new URL("...") または Python の urllib.parse を使用してください。

電話番号。ITU-T 勧告 E.164(現在の改訂版 2010 年 11 月)はオプションの + プレフィックスで最大 15 桁を許可しますが、国別ルールは大きく異なります。Google のオープンソースの libphonenumber ライブラリは、すべての地域の国別ルールをエンコードし、唯一の信頼できる国間バリデータです。

日付。^\d{4}-\d{2}-\d{2}$ のような regex は ISO 8601-1:2019 カレンダー形式に一致しますが、2026-02-31 も受け入れます。日付の有効性はパターンマッチではなくカレンダーロジックを必要とします。Date.parse() または日付ライブラリを使用してください。

クレジットカード。regex は桁数と IIN プレフィックスに一致できます(Visa は 4 で始まり、Mastercard は 51-55 または 2221-2720 で、Amex は 34 または 37 で)が、Luhn チェックサム(ハンス・ピーター・ルーン、IBM、1960 年 8 月に付与された米国特許 2,950,048)を検証できません。Luhn は桁ごとの合計を 10 で割った余りを必要とします。

開発者がこのライブラリを使用する一般的な方法

よくある間違い

その他のよくある質問

なぜ一部のパターンは (...) の代わりに (?:...) を使用するのですか?

(?:...)非キャプチャグループ です。繰り返しや交替のためにグループ化しますが、後方参照スロットを割り当てません。より高速で、結果配列の $1$2 を汚染することを避けます。キャプチャされたテキストを抽出する必要がある場合は (...) を使用し、グループ化のみの場合は (?:...) を使用してください。

最も一般的な regex フラグは何ですか?

i 大文字小文字を区別しない、g グローバル(すべて検索、JS 特有の動作)、m 複数行(^$ が行境界に一致するように)、s dotAll(. が改行に一致するように、ES2018+)、u Unicode(ES2015+)、y sticky(ES2015+)、d hasIndices(ES2022+)、v 集合記法クラス(ES2024+)。/pattern/gimsu として組み合わせます。

リテラル特殊文字にどのように一致させますか?

バックスラッシュでエスケープします。リテラルマッチのためにエスケープが必要な regex メタ文字は:. ^ $ * + ? ( ) [ ] { } | \ /。文字クラス [...] 内では、特殊文字のセットがより小さくなります:位置に応じて ] \ ^ - のみエスケープが必要です。

このライブラリのパターンをシェルスクリプトで使用できますか?

はい、注意点付きで。grep はデフォルトで POSIX BRE を使用し、grep -E は ERE を、grep -P は libpcre がリンクされているシステム(GNU grep、Homebrew 付きの macOS grep)で PCRE を使用します。ルックアラウンド、名前付きグループ、または Unicode エスケープを使用するパターンには grep -P または ripgrep(Rust の RE2 ベースエンジンを使用し、ルックアラウンドを拒否)が必要です。

これらのパターンはサーバーに送信されますか?

いいえ。このページのすべての regex、入力するすべての検索、クイックテストパネルでテストするすべての文字列は、ブラウザの JavaScript エンジンで処理されます。ネットワーク呼び出しは行われません。パターンデータ自体は、ページバンドルの静的 JSON ファイルとして出荷されます。確認のために DevTools のネットワークタブを開いてください。

関連ツール