Riferimenti secondari RegEx in IntelliJ


129

Voglio usare la funzione di ricerca e sostituzione di IntelliJ per eseguire la seguente trasformazione:

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

Ho provato quanto segue:

Testo da trovare: model.put\((.*),(.*)\) sostituisci con:model\[\\1\] = \\2

Ma Intellij non sembra riconoscere \\1e \\2come riferimenti arretrati. Ho anche provato una singola barra, ma non funziona neanche.

Risposte:


196

IntelliJ utilizza $1per i riferimenti di rimpiazzo .

Dall'aiuto di IntelliJ:

Per ulteriori informazioni sulle espressioni regolari e sulla loro sintassi, consultare la documentazione per java.util.regex I riferimenti posteriori devono avere $ n, anziché il formato \ n.


15
Sembra che "\" non sia richiesto: jetbrains.com/idea/help/… . Inoltre, per me funziona solo se circondo esplicitamente il mio gruppo con "()", altrimenti non posso fare riferimento in un secondo momento. Esempio: ricerca (foo)sostituisci:$1bar
Ghedeon

@Ghedeon: probabilmente dovresti aggiungere il tuo commento come risposta o alla risposta esistente. Il tuo suggerimento di inserire l'espressione tra () è ciò che ha funzionato per me.
mindreader

1 il bit di informazione che ha risolto il mio problema correlato: sto sostituendo quote-più involucri intorno variabili con involucri in dollari ricci, vale a dire, '+ var +'a ${var}in alcuni stringhe di modello e non riuscivo a capire perché IntelliJ non finiremmo la sostituzione. risulta che $deve essere evitato nella sostituzione.
worc,

13

In breve, è necessario utilizzare $1per $nper la sostituzione backreference. \1la sintassi è solo per i riferimenti indietro all'interno della ricerca.

In IntelliJ 2016, la documentazione in-app è fuorviante. Ecco una citazione migliore dai documenti completi:

Se è necessario fare riferimento alla sottostringa corrispondente da qualche parte all'esterno dell'espressione regolare corrente (ad esempio, in un'altra espressione regolare come stringa di sostituzione), è possibile recuperarla utilizzando il simbolo del dollaro ($ num, dove num = 1..n).

Fonte: sintassi delle espressioni regolari 2016.1, consigli e suggerimenti


2

La guida contestuale all'interno del prodotto per regex in Idea 9.0 (e forse altre versioni) sembra essere errata. Lo afferma:

  Riferimenti posteriori
  \ n
  Qualunque sia l'ennesimo gruppo di cattura abbinato

Ma a quanto pare, come menzionato nelle risposte precedenti ed è la mia esperienza, è davvero \ $ n per i riferimenti posteriori, piuttosto che \ n

Puoi accedere a questa guida contestuale facendo clic sul collegamento "[Guida]" accanto all'opzione radio "Espressione regolare" nella finestra di dialogo "Sostituisci testo"


0

IntelliJ IDEA / Riferimenti / Sintassi delle espressioni regolari


Corrisponde alla sottoespressione e ricorda la corrispondenza. Se è necessario utilizzare la sottostringa corrispondente all'interno della stessa espressione regolare, è possibile recuperarla utilizzando il backreference (\ num, dove num = 1..n). Se è necessario fare riferimento alla sottostringa corrispondente da qualche parte all'esterno dell'espressione regolare corrente (ad esempio, in un'altra espressione regolare nel campo Sostituzione), è possibile recuperarla utilizzando il simbolo del dollaro ($ num, dove num = 1..n). Se è necessario includere i caratteri tra parentesi nella sottoespressione, utilizzare "(" o ")".


Ho trovato la stessa cosa qui ; tuttavia, alla fine ho avuto successo usando $ 1, senza la barra rovesciata.
Joe Tricarico,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.