正規表現とパターン照合

正規表現エンジン比較PCRE2とRE2を実行

実装済みのエンジンを選び、パターン本体と文字列を入力して実行します。

正規表現エンジン比較

パターン

区切り記号 / を付けずに本体だけ入力します。RE2内部は常にUnicodeです。

テスト文字列

結果

入力または手動テストを待っています。

一致処理はブラウザ内の別スレッドで実行され、パターンと文字列は送信されません。

オプション

入力または手動テストを待っています。

エンジン機能の一覧

実行されるのはPCRE2とRE2だけです。言語の行は参考情報です。

対象実行後読み後方参照範囲
PCRE2実行可可PCRE2 WASM。PHPの関数層は別です。
RE2実行不可不可RE2 WASM。Go/Rust本体ではありません。
PHP / PCRE2PCRE2本体のみ可可PHP preg_*には区切りや戻り値があります。
Java参考のみ可可Java実行環境はありません。
Go参考のみ不可不可Go regexpは別実装です。
Rust参考のみ不可不可Rust regexは別実装です。
.NET参考のみ可可.NET実行環境はありません。

PHP用の式をGoへ移すとき、JavaScriptの強調表示だけでは移植先で動くと判断できません。正規表現エンジン比較は同じ文字列でコンパイルの成否を比べます。

正規表現テスターの選択名だけでは実装を判断できません。PCRE2テストはここでできますが、Go正規表現の本番動作にはGo本体の言語別チェッカーが必要です。

正規表現エンジン比較を使う理由

一つの入力から実際の構文差を確認できます。

二つの実体あるエンジン

正規表現エンジン比較はJavaScriptの名前を変えません。後読みはPCRE2で一致し、RE2では構文エラーになります。

PCRE2は一文字を強調し、RE2は同じ抽象パターンに構文エラーを示す。

古い結果を持ち出さない

パターン、文字列、エンジンまたはオプションを変えると、前回のコピーと保存は無効になります。

入力変更後、古い報告カードが薄くなり保存の矢印がロックされる。

比較前に確かめる三点

01

区切り記号を外す

(?<=a)bのように本体だけ入力します。例を読み込む前に上書き内容を確認でき、適用後は一度取り消せます。

  • 空パターンも手動実行時にのみ評価します。
02

実装済みのエンジンを選ぶ

初期値はPCRE2です。RE2も独立したWASMで、iとmは初期状態でオフです。

  • 自動実行はせず、Ctrl/Cmd+Enterでも実行できます。
03

位置とグループを読む

開始位置は0基準のUTF-16単位で、終了位置は範囲外です。画面は50件ずつ表示し、JSONには成功した全件が入ります。

  • タイムアウトした途中結果は保存できません。

実行結果の読みどころ

本当の構文差

後読みと後方参照はPCRE2で使えますが、RE2ではエラーです。別エンジンへの黙った切替はしません。

キャプチャと文字位置

番号付き・名前付きグループを表示し、絵文字の後もRE2位置をUTF-16へ変換します。

中断できる処理

照合はWorkerで行い、二秒で打ち切れます。入力、件数、レポートに上限があります。

エンジンと件数の境界

PHPそのものではない
PCRE2の中核のみ実行し、PHPの区切り記号やpreg_matchの返り値は再現しません。
GoとRustは参考情報
RE2はGo regexpやRust regexと同一実装ではありません。両言語の結果はここで実測しません。
照合だけを提供
置換、抽出、分割は対象外で、エンジン間の置換記法を混ぜません。
途中結果を成功扱いしない
文字列100000 UTF-16単位、パターン2000、結果1000件、実行二秒を上限とします。

正規表現エンジン比較の質問

Goの正規表現で先読みや後読みは使えますか?

正規表現エンジン比較はPCRE2を初期選択します。PHPのpreg_*関数全体ではなくPCRE2の照合本体です。

PHPとJavaの正規表現は同じですか?

後読みや後方参照はRE2で使えません。Goで使うならGo regexpでの最終確認も必要です。

正規表現を言語別にテストするには?

使えません。RE2を選ぶと実際の構文エラーを表示します。

PCRE2とRE2の違いは何ですか?

同一とは限りません。Unicode、フラグ、キャプチャの扱いを対象言語で確認してください。

同じパターンが別の言語で動かないのはなぜですか?

PCRE2とRE2だけを実行します。Javaや.NETは表で示しますが、このページでは動きません。

解決しませんでしたか?

正規表現エンジン比較を試す

正規表現エンジン比較の例を読み込み、同じ文字列でPCRE2とRE2を順に実行してください。

パターンと文字列はブラウザー内で処理し、自動送信しません。