RegEx-Rückreferenzen in IntelliJ

129

Ich möchte die Such- und Ersetzungsfunktion von IntelliJ verwenden, um die folgende Transformation durchzuführen:

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

Ich habe folgendes versucht:

Zu findender Text: model.put\((.*),(.*)\) Ersetzen durch:model\[\\1\] = \\2

Aber Intellij scheint nicht zu erkennen \\1und \\2als Rückreferenzen. Ich habe auch einen einzelnen Schrägstrich versucht, aber das funktioniert auch nicht.

Dónal
quelle

Antworten:

196

IntelliJ verwendet $1für Ersatz Rückreferenzierungen.

Aus der Hilfe von IntelliJ:

Weitere Informationen zu regulären Ausdrücken und ihrer Syntax finden Sie in der Dokumentation zu java.util.regex. Zurückverweise sollten das Format $ n und nicht das Format \ n haben.

Steve K.
quelle
15
"\" Scheint nicht erforderlich zu sein: jetbrains.com/idea/help/… . Außerdem funktioniert es für mich nur, wenn ich meine Gruppe explizit mit "()" umgeben habe, andernfalls kann ich später nicht darauf verweisen. Beispiel: Suche (foo)ersetzen:$1bar
Ghedeon
@ Ghedeon: Sie sollten Ihren Kommentar wahrscheinlich als Antwort oder zur vorhandenen Antwort hinzufügen. Ihr Vorschlag, den Ausdruck in () einzufügen, hat bei mir funktioniert.
Mindreader
1 die Menge an Informationen , die mein verwandtes Problem gelöst: i Zitat-plus bin ersetzen Wrapper um Variablen mit Dollar-geschweiften Wrapper, dh '+ var +'um ${var}in einigen Template Strings und konnte nicht herausfinden , warum intellij nicht auf den Ersatz beenden würde. Es stellt sich heraus $, dass beim Ersatz entkommen muss.
worc
13

Kurz gesagt, Sie müssen verwenden $1, $num Ersatzreferenzen zu ersetzen. \1Die Syntax gilt nur für Rückverweise innerhalb der Suche.

In IntelliJ 2016 ist die In-App-Dokumentation irreführend. Hier ist ein besseres Zitat aus den vollständigen Dokumenten:

Wenn Sie die übereinstimmende Teilzeichenfolge irgendwo außerhalb des aktuellen regulären Ausdrucks referenzieren müssen (z. B. in einem anderen regulären Ausdruck als Ersatzzeichenfolge), können Sie sie mithilfe des Dollarzeichens ($ num, wobei num = 1..n) abrufen.

Quelle: 2016.1 Syntax für reguläre Ausdrücke, Tipps und Tricks

Barett
quelle
2

Die produktinterne kontextbezogene Hilfe für Regex in Idea 9.0 (und möglicherweise anderen Versionen) scheint falsch zu sein. Darin heißt es:

  Rückverweise
  \ n
  Was auch immer die n-te Erfassungsgruppe war

Aber anscheinend, wie in früheren Antworten erwähnt und meiner Erfahrung nach, ist es wirklich \ $ n für Rückverweise und nicht \ n

Sie gelangen zu dieser kontextbezogenen Hilfe, indem Sie im Dialogfeld "Text ersetzen" auf den Link "[Hilfe]" neben der Radiooption "Regulärer Ausdruck" klicken

Tal
quelle
0

IntelliJ IDEA / Referenz / Syntaxreferenz für reguläre Ausdrücke


Stimmt mit dem Unterausdruck überein und merkt sich die Übereinstimmung. Wenn Sie den übereinstimmenden Teilstring innerhalb desselben regulären Ausdrucks verwenden müssen, können Sie ihn mithilfe der Rückreferenz abrufen (\ num, wobei num = 1..n). Wenn Sie den übereinstimmenden Teilstring irgendwo außerhalb des aktuellen regulären Ausdrucks verweisen müssen (z. B. in einem anderen regulären Ausdruck im Feld Ersetzen), können Sie ihn mithilfe des Dollarzeichens ($ num, wobei num = 1..n) abrufen. Wenn Sie die Klammerzeichen in den Unterausdruck aufnehmen müssen, verwenden Sie "(" oder ")".

Cong De Peng
quelle
Ich habe hier dasselbe gefunden ; Letztendlich hatte ich jedoch Erfolg mit $ 1 ohne den Backslash.
Joe Tricarico