コンテンツへスキップ
uencoder

正規表現の後方参照を使う

後方参照 \1、\2 は、以前のキャプチャグループと同じテキストにマッチします。繰り返し単語、対になる区切り文字、回文のマッチングに便利です。

  1. 1

    後方参照 \1 (一部のフレーバーでは $1) は、1 番目のグループがキャプチャしたテキストそのものにマッチします。\2 は 2 番目、という具合です。活用例:繰り返し単語のマッチ (\b(\w+)\s+\1\b)、対になった引用符 ("([^"]*)")、HTML タグ (<(\w+)>.*?</\1>)、対称パターンです。

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

    後方参照パターンをテストします。\b(\w+)\s+\1\b で繰り返し単語 ("the the") を検出します。<(\w+)[^>]*>.*?</\1> で開始タグと終了タグが対応する HTML タグにマッチします。後方参照により、終了タグが開始タグ名と一致することが保証されます。

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

    置換で後方参照を使います。(\w+)\s+\1 を $1 に置き換えると、連続する単語を重複なくできます。"the the cat" → "the cat"。パターン内の後方参照 \1 が繰り返された単語にマッチし、置換後の $1 が 1 つ分を残します。

よくある質問

後方参照はグループと違うテキストにマッチできますか?
いいえ。後方参照は、グループがキャプチャしたものとまったく同じテキストにのみマッチします。グループ 1 が "hello" をキャプチャしたなら、\1 は文字どおり "hello" にマッチします。パターンにマッチするわけではありません。だからこそ、対になる区切り文字や繰り返し内容のマッチに後方参照が役立つのです。
後方参照は効率的ですか?
後方参照を使うと、最悪の場合の正規表現マッチは NP 完全になります (線形時間のアルゴリズムは存在しません)。単純なケース (対になる区切り文字、繰り返し単語) なら性能は問題ありません。大きな入力に対して後方参照を含む複雑なパターンを使う場合は、ハングを防ぐためタイムアウトを設定してください。

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

関連ツール