正規表現テスター
フラグ:g(全体検索)、i(大文字小文字無視)、m(複数行)、s(改行含む)
シェアする
使い方
- 1 正規表現パターンを入力(例: <code>\d+</code> = 連続する数字)。
- 2 フラグ(i: 大小区別なし、m: 複数行、s: .が改行を含む、u: UTF-8)を入力。
- 3 対象テキストを入力し、「テスト」ボタンをクリックすると、マッチ件数・ハイライト表示・一覧が表示されます。
- 4 プリセット(メール・URL・電話番号等)から選択もできます。エラーは「PCRE構文エラー」として通知。
正規表現テスターについて
よくある質問
Q メールアドレスの正規表現は?
基本形は<code>^[\w.+-]+@[\w-]+\.[\w.-]+$</code>。完全準拠のRFC 5322は非常に複雑(数百文字)で実用的でないため、簡易版を使うのが一般的。フロントエンドではこれで十分、サーバー側では実際にメール送信して確認する方が確実です。
Q JavaScriptとPHPの正規表現は同じ?
9割以上同じ構文ですが微妙に違います。<strong>PHP PCRE2はJSのスーパーセット</strong>で、<code>\K</code>(マッチリセット)・所有量子<code>++</code>・名前付きグループ<code>(?P<name>)</code>等の追加機能あり。逆にJSは<code>y</code>フラグ(sticky)を持ちます。共通機能(<code>\d</code>, <code>+</code>, <code>?</code>等)は両方で動作。
Q パスワード強度をチェックするには?
<code>^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$</code>で<strong>小文字+大文字+数字+記号+8文字以上</strong>のパスワードチェック可能。先読み<code>(?=...)</code>を組合せています。本ツールでこのパターンを試して、自分のパスワードが要件を満たすか確認できます。
Q 日本の郵便番号にマッチするには?
<code>^\d{3}-\d{4}$</code>(123-4567形式)が標準。ハイフンなし版も含めるなら<code>^\d{3}-?\d{4}$</code>(?でハイフンを任意に)。本ツールにこのパターンと「123-4567」「1234567」を入力すると両方マッチ確認できます。
Q ReDoS攻撃とは?
悪意あるユーザーが<strong>致命的なバックトラック</strong>を引き起こす入力を送り、サーバーをハングさせる攻撃。例えば<code>(a+)+</code>に「aaaaaaaaaaaaaaaaaab」を入力すると指数的時間がかかります(2の19乗回のバックトラック)。対策は: ①ネストされた量子を避ける、②パターンを単純化、③タイムアウト設定、④ユーザー入力をリテラル文字列として扱う等。本ツールは<code>preg_match_all</code>のtimeoutが設定されていますが、複雑なパターンは注意してください。
Q 貪欲(greedy)と非貪欲(lazy)の違いは?
<code>*</code>と<code>+</code>はデフォルトで<strong>貪欲(可能な限り長くマッチ)</strong>、<code>?</code>を後ろに付けると<strong>非貪欲(短くマッチ)</strong>に。例: <code><.+></code>を「<a>text<b>」に適用すると、貪欲だと「<a>text<b>」全体、<code><.+?></code>(非貪欲)だと「<a>」だけマッチ。HTMLパースで頻出のテクニック。
Q 日本語(漢字・かな)を含めるには?
Unicodeコードポイント範囲を使います:</p><ul class="ri-ul"><li>ひらがな: <code>[\x{3040}-\x{309F}]</code></li><li>カタカナ: <code>[\x{30A0}-\x{30FF}]</code></li><li>漢字: <code>[\x{4E00}-\x{9FFF}]</code>(基本ブロック)</li><li>全角英数: <code>[\x{FF10}-\x{FF5A}]</code></li></ul><p>本ツールは常時UTF-8(uフラグ)で動作するため、日本語はそのままパターン内に書けます。例: <code>こんにちは|さようなら</code>は両方マッチ。
Q グループとキャプチャの違いは?
<code>()</code>は<strong>グループ化+キャプチャ</strong>、<code>(?:...)</code>は<strong>グループ化のみ(キャプチャなし)</strong>。例: <code>(\d{4})-(\d{2})</code>で「2026-05」をマッチさせると、グループ1=2026・グループ2=05として後で参照可能。一方<code>(?:abc|def)+</code>のように選択肢をまとめたいだけならキャプチャ不要で速度向上。本ツールはマッチ全体を一覧表示します。
Q 正規表現を使うべきでない場面は?
</p><ul class="ri-ul"><li><strong>HTML/XML完全パース</strong>: 入れ子・属性・コメント等で正規表現は限界あり、専用パーサ(DOMDocument・SimpleXML等)使用</li><li><strong>JSON</strong>: <code>json_decode()</code>等の専用関数を使う</li><li><strong>URL分解</strong>: <code>parse_url()</code>等</li><li><strong>非常に大きなテキスト</strong>(数百MB): メモリ消費が膨大</li><li><strong>セキュリティクリティカル</strong>: SQL injection等は別途プリペアドステートメント</li></ul><p>正規表現は強力ですが、すべての文字列処理に最適ではありません。