IntelliJのRegEx後方参照


129

IntelliJの検索と置換機能を使用して、次の変換を実行したいと思います。

// Replace this
model.put('foo', 'bar')
// With this
model['foo'] = bar

私は以下を試しました:

検索するテキスト:model.put\((.*),(.*)\) 置換:model\[\\1\] = \\2

しかしのIntelliJは認識していないようです\\1し、\\2後方参照として。スラッシュも1つ試しましたが、それでもうまくいきません。

回答:


196

IntelliJは置換の後方参照に使用$1します。

IntelliJの助けから:

正規表現とその構文の詳細については、java.util.regexのドキュメントを参照してください。後方参照の形式は、\ nではなく$ nにする必要があります。


15
「\」は不要のようです:jetbrains.com/idea/help/…。また、私にとっては、グループを「()」で明示的に囲んだ場合にのみ機能します。それ以外の場合、後で参照することはできません。例:検索(foo)置換:$1bar
Ghedeon 2015年

@Ghedeon:コメントを回答として、または既存の回答に追加する必要があります。()に式を入れるというあなたの提案が私にとってうまくいきました。
マインドリーダー2017

1私の関連する問題を解決し、情報のビット:私は、すなわちドルカーリーラッパー、と変数の周りに引用プラスラッパーを交換しています'+ var +'${var}、いくつかのテンプレート文字列にとのIntelliJの交換が完了していないだろう、なぜ把握できませんでした。$置換でエスケープする必要があることが判明しました。
2017年

13

つまり、置換の後方参照には$1to $nを使用する必要があります。構文は、検索内の後方参照専用です。\1

IntelliJ 2016では、アプリ内ドキュメントは誤解を招くものです。ここに完全なドキュメントからのより良い引用があります:

一致した部分文字列を現在の正規表現の外のどこかで参照する必要がある場合(たとえば、置換文字列として別の正規表現で)、ドル記号($ num、num = 1..n)を使用してそれを取得できます。

出典:2016.1正規表現構文、ヒントとコツ


2

Idea 9.0(およびおそらく他のバージョン)の正規表現の製品内コンテキストヘルプは正しくないようです。それはこれを述べています:

  後方参照
  \ n
  n番目のキャプチャグループが一致したもの

しかし、どうやら、以前の回答で述べたように、私の経験では、それは実際には\ nではなく、後方参照用です。

このコンテキストヘルプは、[テキストの置換]ダイアログボックスの[正規表現]ラジオオプションの横にある[[ヘルプ]]リンクをクリックすると表示されます。


0

IntelliJ IDEA /リファレンス/正規表現構文リファレンス


部分式に一致し、一致を記憶します。同じ正規表現内で一致した部分文字列を使用する必要がある場合は、後方参照(\ num、num = 1..n)を使用してそれを取得できます。一致した部分文字列を現在の正規表現の外のどこかで参照する必要がある場合(たとえば、[置換フィールド]の別の正規表現で)、ドル記号($ num、num = 1..n)を使用してそれを取得できます。かっこ文字を部分式に含める必要がある場合は、 "("または ")"を使用します。


ここで同じものを見つけた。しかし、最終的には円記号なしで$ 1を使用して成功しました。
Joe Tricarico
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.