広告が嫌いですか? 行く 広告なし 今日

正規表現フレーバーコンバーター (PCRE / JS / Python / Go)

開発者

テストパネル

構文リファレンス

ガイド

正規表現フレーバーコンバーター (PCRE / JS / Python / Go)

正規表現フレーバーコンバーター

プログラミング言語のフレーバー間で正規表現を変換します: PCRE (PHP)、JavaScript、Python、Go、Java、Ruby。名前付きグループ、フラグ、後方参照、その他の構文の違いを自動的に変換します。互換性のない機能を明確な警告とともにハイライトします。変換された正規表現をサンプル文字列に対して検証するためのテストパネルが含まれています。

使用方法

正規表現パターンを入力し、ソースフレーバー(記述された言語)とターゲットフレーバー(変換したい言語)を選択します。変換された正規表現は、フラグが翻訳された状態で即座に表示されます。変換ノートで、行われた変更とサポートされていない機能に関する警告を確認してください。サンプルテキストに対して変換されたパターンを検証するためにテストパネルを使用してください。

機能

  • 6 つの正規表現フレーバー — PCRE (PHP)、JavaScript (ES2018+)、Python (re モジュール)、Go (regexp)、Java (java.util.regex)、Ruby。任意のペア間で変換できます。
  • 名前付きグループの変換 — (?P…) (PCRE/Python/Go) と (?…) (JS/Java/Ruby) の構文間で自動的に変換します。
  • フラグの変換 — フレーバー間でフラグを変換します: /gi (JS) ↔ re.IGNORECASE (Python) ↔ (?i) インライン (PCRE/Go) ↔ Pattern.CASE_INSENSITIVE (Java)。
  • 後方参照の変換 — 名前付き後方参照が変換されます: (?P=name) ↔ k フレーバー間で。
  • 互換性のない機能に関する警告 — 色分けされたアラート: 正常な変換は緑、構文の変更は黄色、サポートされていない機能は赤(例: Go はルックビハインドをサポートしない、JS はアトミックグループをサポートしない)。
  • テストパネル — 変換された正規表現をサンプル文字列に対してテストします。JavaScript の RegExp エンジンを使用して、一致、グループ、一致数を示します。
  • 構文リファレンス — すべてのフレーバー間の主な違いを示す、折りたたみ可能な参照テーブル: 名前付きグループ、ルックアヘッド/ルックビハインド、フラグ、文字クラス、アトミックグループ、Unicode サポート。
  • 自動変換 — 入力中またはフレーバーを変更すると、結果が即座に更新されます。

変換されるもの

名前付きグループ: (?P) ↔ (?) の構文の違い。
名前付き後方参照: (?P=name) ↔ k ↔ }{ g{name}。
フラグ: インライン (?imsx)、サフィックス /gi、および言語固有の定数。
ルックビハインドアサーション: PCRE/JS/Java でサポート、Python/Ruby で限定的、Go でサポートされていません。
アトミックグループ: (?>…) — PCRE/Java/Ruby のみ。JS/Python/Go では警告が表示されます。
所有権のある量指定子: a++ — PCRE/Java/Ruby のみ。
文字クラス: \R、\h、\v (PCRE 固有) は他のフレーバーではフラグが付けられます。
コメント: (?#…) 構文 — PCRE/Python のみ。
条件: (?(cond)yes|no) — PCRE のみ。

なぜ正規表現のフレーバーは言語間で異なるのですか?

正規表現の実装は、プログラミング言語ごとに独立して進化しました。Perl の正規表現エンジン (PCRE) は最も機能が豊富になり、名前付きグループ、ルックビハインド、アトミックグループ、その他の高度な機能が追加されました。他の言語はサブセットを採用しました: JavaScript は当初基本的な正規表現を持ち、徐々​​に機能を追加しました(ES2018 で名前付きグループ、ES2018 でルックビハインド)。Python の re モジュールは、初期の提案から引き継がれた (?P) 構文を使用しています。Go は意図的に、線形時間マッチングを保証するもののルックビハインドのような機能を犠牲にした、よりシンプルな正規表現エンジン (RE2) を選択しました。各言語は、パワーとパフォーマンスの間で異なるトレードオフをしました。

変換できない正規表現の機能は何ですか?

一部の機能は 1 つまたは 2 つのフレーバーにしか存在せず、他のフレーバーには同等のものがありません。ルックビハインドアサーションは Go の RE2 エンジンには存在しません — 回避策はなく、パターンの再設計のみが必要です。アトミックグループと所有権のある量指定子 (PCRE/Java/Ruby) は、JavaScript、Python、または Go に直接同等のものがありません。 R (任意の改行)、 h (水平空白)、 v (垂直空白) のような PCRE 固有の文字クラスは、文字クラスの同等物に展開する必要があります。条件付きパターン (?(cond)yes|no) は PCRE のみです。このツールは、これらの非互換性について警告するので、手動での注意が必要なものを知ることができます。

テストパネルはすべてのフレーバーで正確ですか?

テストパネルは JavaScript のネイティブ RegExp エンジンを使用しているため、JavaScript の正規表現の動作を正確にテストします。他のターゲットフレーバーの場合、テストは合理的な近似を提供しますが、エッジケースでは異なる場合があります — 特に Unicode の処理、改行の動作、JavaScript がサポートしていない機能(アトミックグループなど)に関しては。本番環境での使用については、常に実際のターゲット言語で変換された正規表現をテストしてください。テストパネルは、基本的なパターンのマッチングの迅速な検証に最適です。

PCRE と JavaScript の正規表現の違いは何ですか?

PCRE (Perl 互換正規表現、PHP で使用) は最も機能が豊富なフレーバーです: 名前付きグループ (?P)、可変長ルックビハインド、アトミックグループ (?>…)、所有権のある量指定子 (a++)、条件付きパターン、再帰パターン、およびインラインフラグスコープ (?i:…) をサポートします。JavaScript の正規表現はよりシンプルです: 名前付きグループは (?) を使用し、ルックビハインドは ES2018 で追加され、アトミックグループ、所有権のある量指定子、または条件付きのサポートはありません。PCRE は JavaScript のような /pattern/flags 構文を使用しますが、より多くのフラグ ( verbose モードの x、DOTALL の s) をサポートします。PCRE → JS への変換では、高度な機能を削除する必要があることがよくあります。

広告なしで楽しみたいですか? 今すぐ広告なしで

拡張機能をインストールする

お気に入りのブラウザにIOツールを追加して、すぐにアクセスし、検索を高速化します。

に追加 Chrome拡張機能 に追加 エッジ拡張 に追加 Firefox 拡張機能 に追加 Opera 拡張機能

スコアボードが到着しました!

スコアボード ゲームを追跡する楽しい方法です。すべてのデータはブラウザに保存されます。さらに多くの機能がまもなく登場します!

ニュースコーナー 技術ハイライト付き

参加する

価値ある無料ツールの提供を継続するためにご協力ください

コーヒーを買って