コンテンツへスキップ
uencoder

正規表現パターンをステップごとにデバッグする

サンプル入力に対するテスト、マッチの可視化、パターンがマッチする/しない理由の理解によって正規表現をデバッグします。フラグを正しく使いましょう。

  1. 1

    正規表現のデバッグ手順:(1) マッチすべき入力とマッチすべきでない入力の両方でテストする。(2) フラグを確認する — g(グローバル)、i(大文字小文字を無視)、m(複数行)、s(dotall)。(3) ビジュアライザでエンジンのマッチ過程を目視する。(4) パターンを単純化する — 動くまで部分を取り除き、戻す。(5) よくあるミスを確認:特殊文字のエスケープ忘れ、誤った量指定子、誤ったアンカー。

  2. 2
    正規表現テスター →

    パターンを複数の入力に対してテストします。まずマッチすべき単純なケースから始め、次にエッジケース(空文字列、特殊文字、Unicode)を試します。ツールはすべてのマッチとキャプチャグループを表示し、パターンが期待から逸脱している箇所を特定しやすくします。

  3. 3
    正規表現置換ツール →

    置換の中でパターンをテストし、文脈での動作を確認します。パターン自体は正しくマッチしても、置換で問題が明らかになることがあります(間違ったグループのキャプチャ、量指定子のオフバイワン)。

よくある質問

なぜ正規表現が何もマッチしないのですか?
よくある原因:複数マッチ用の g フラグの欠落、パターンが厳しすぎる(誤った量指定子、選択の欠落)、特殊文字の未エスケープ(. は任意の文字にマッチ、\. はリテラルのドットにマッチ)、大文字小文字の区別(i フラグを追加)、誤った位置のアンカー。マッチするはずの最小の入力でテストしてください。
m フラグと s フラグの違いは?
m(複数行)は ^ と $ が行境界でもマッチするようにします(文字列の先頭/末尾だけでなく)。s(dotall、単一行)は . が改行にもマッチするようにします。両者は独立です。m は ^/$ に、s は . に影響します。. が改行にマッチし ^/$ が行境界にマッチするようにするには、両方使ってください(ms または gm)。

このタスクを解決するワークフロー

関連ツール