piapia123
ja

正規表現コード生成

Web

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

正規表現を入力して言語を選ぶと、マッチ・全抽出・置換・判定の 4 つのコード片が出ます。 このツールの要点は「バックスラッシュを何個書くか」です。 同じ `\d+` でも言語によって書く個数が違い、しかも間違えても何も起きません: · JavaScript では `"\d"` は `"d"` と同じ —— 文字列内の無効なエスケープは黙って捨てられ、正規表現は知らないうちに `d` になり、何も一致しなくなります。`"\\d"` と書くか、正規表現リテラル `/…/` を使ってください。 · Python は Raw 文字列 `r"…"` なら二重化不要。通常の文字列だと DeprecationWarning が出ます。 · Java / C# の二重引用符文字列ではバックスラッシュがエスケープなので `\\d` と書く必要があります。 · PHP のシングルクォート文字列では `\\` と `\'` だけがエスケープなので、`'/\d/'` が正しい書き方です —— ここで二重化するのが誤りです。 · Go はバッククォートの Raw 文字列で、同じく二重化不要です。 ⚠️ コンパイルできない正規表現はその場でエラーにします —— 動かないコードを生成して利用者のプロジェクトで失敗させると、エラーメッセージはここよりずっと分かりにくくなります。 ⚠️ 置換文字列の `$1` / `\1` はグループ参照で、言語ごとに書き方が違います(Python は `\1`、他は概ね `$1`)。結果にその注記を出しています。

機能

  • 6 言語:JavaScript・Python・Java・Go・PHP・C#
  • ⚠️ 各言語それぞれの正しいエスケープを出力します(同じ文字列を使い回しません)
  • 4 種類のコード片:マッチ・全抽出・置換・判定のみ
  • コード片はそのまま動く形(import / using と変数宣言つき)。裸の式ではありません
  • フラグは各言語の書き方に翻訳(`re.IGNORECASE`、`Pattern.CASE_INSENSITIVE`、`RegexOptions.IgnoreCase`)
  • ⚠️ コンパイルできない正規表現はその場でエラー
  • 生成されるコードは画面の言語に依存しません
  • すべて端末内で計算します

使い方

  1. 正規表現を入力します(前後のスラッシュは不要)
  2. 対象言語を選び、必要ならフラグと置換文字列を入力します
  3. その言語の 4 つの書き方が出ます
  4. コピーする前に「文字列リテラル内では」の行を確認してください —— 最も間違えやすい箇所です

よくある質問

JavaScript で "\d" が効かないのはなぜですか?
文字列内の無効なエスケープが黙って捨てられるからです。JS では `"\d"` は単なる `"d"` で、正規表現は文字 d に一致するものになってしまいます。これは最も見つけにくい種類の不具合です —— エラーも警告も出ず、ただ一致しません。対処は 2 つ:`"\\d"` と二重化するか、正規表現リテラル `/\d/` を使う(リテラル内では二重化不要。ここでの JavaScript のコード片はこちらです)。Java と C# の二重引用符文字列も同じですが、あちらはコンパイル時に落ちるぶん安全です。
PHP のシングルクォートで二重化が不要なのはなぜですか?
PHP のシングルクォート文字列では `\\` と `\'` だけがエスケープで、他のバックスラッシュはそのまま残るからです。したがって `'/\d/'` の `\d` は正規表現エンジンにそのまま届きます。一方 PHP の二重引用符文字列は `\d` をエスケープとして扱う(結果は同じ d ですが警告が出ます)ため、そちらでは二重化が必要です。1 つの言語に 2 つのクォート規則があることが、言語別に出力する理由です。
そのままプロジェクトに貼れますか?
貼れます。コード片は完全な形(import / using と変数宣言つき)です。ご自身で調整するのは数か所:変数名(`text` は皆さんの文字列)と、置換文字列のグループ参照の書き方(Python は `\1`、Go は `$1` かより安全な `${1}`、他は概ね `$1`)です。なお共通のフラグ(i / m / s)だけを翻訳しています —— `g` は JavaScript 固有の考え方で、他言語では「一致を繰り返し取る」というループで表すため、Java の全抽出は `while (matcher.find())` になっています。`y`(粘着マッチ)も JavaScript だけのもので、選ぶと「無視しました」と結果に明記します。

関連ツール