2009-09-03 13 views
101

In eclissi, è possibile utilizzare la stringa di ricerca corrispondente come parte della stringa di sostituzione quando si esegue una ricerca di espressioni regolari e la si sostituisce?Eclipse, ricerca e sostituzione di espressioni regolari

Fondamentalmente, voglio sostituire tutte le occorrenze di

variableName.someMethod() 

con:

((TypeName)variableName.someMethod()) 

Dove nomeVariabile può essere un qualsiasi nome di variabile a tutti.

In sed potrei usare qualcosa di simile a:

s/[a-zA-Z]+\.someMethod\(\)/((TypeName)&)/g 

Cioè, & rappresenta la stringa di ricerca corrispondente. C'è qualcosa di simile in Eclipse?

Grazie!

+0

buona documentazione su Eclipse RegEx: http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.jubula.client.ua.help%2Fhtml%2Freference%2Fnode4.html –

risposta

201

Sì, "()" cattura un gruppo. puoi usarlo di nuovo con $ i dove sono il gruppo di acquisizione.

così:

search: (\w+\.someMethod\(\)) 
replace: ((TypeName)$1) 

suggerimento: CTRL + spazio nelle caselle di testo ti dà tutti i tipi di suggerimenti per regolare l'espressione di scrittura. (Temo la chiave verso il basso, per andare verso il basso l'elenco di suggerimenti, non cancellare il tuo ingresso nella casella di testo. Irritante piccolo bug)

+1

essa non funziona per moi :( – kellogs

+12

Ottima risposta, in particolare il suggerimento è un punto in più vale :) –

+0

Questa è una bella risposta e un utile suggerimento. Sarebbe stato più utile se fosse stato descritto in modo un po 'più dettagliato. – iammilind

2

Almeno a STS (SpringSource Tool Suite) gruppi sono numerati forma di partenza 0, quindi la stringa sostitutiva sarà

+5

Questo non è vero afaik. $ 0 rappresenta l'intero termine di ricerca originale. In questo caso, suppongo che funzionerebbe comunque per coincidenza. –

0

Per qualcuno è necessaria una spiegazione e un esempio di come utilizzare regx su eclipse, sperare che questo sia utile. Ecco il mio problema

enter image description here

voglio rinominare

/download.mp4^lecture_id=271 

a

/271.mp4 

E ci possono essere molti di questi.

Come si dovrebbe fare questo è.

enter image description here

poi ha colpito trova/sostituisci pulsante

6

utilizzando ...
ricerca = (^. * Importazione) (*). (\ (. * \) :)
replace = $ 1 $ 2

... sostituisce ...

from checks import checklist(_list): 

... con ...

from checks import checklist 



Blocchi in regex sono delimitati da parentesi (che non vengono precedute da un "\")

(^. * import) trova "da checks import" e lo carica a $ 1 (eclipse inizia a contare a 1)

(. *) trova il prossimo "tutto" fino al prossimo encoun tered "(" e lo carica a $ 2. $ 2 si ferma a "(" a causa della parte successiva (vedere la riga successiva sotto)

(\ (. * \) :) dice "al primo incontrato" ("dopo aver avviato il blocco $ 2 ... blocca blocco $ 2 e inizia $ 3. $ 3 viene caricato con "('qualsiasi testo'):" o, nell'esempio, "(_list):"

Quindi nella sostituzione, basta mettere $ 1 $ 2 per sostituire tutti e tre i blocchi con solo i primi due.



Screenshot

2

NomeN ha risposto correttamente, ma questo un swer non sarebbe di grande utilità per i principianti come me perché avremo un altro problema da risolvere e non sapremmo come usare RegEx. Quindi aggiungo un po 'di spiegazione a questo. La risposta è

ricerca: (\ w + \ someMethod \ (\).)

sostituire: ((TypeName) $ 1)

Qui:

Alla ricerca:

  • Primo e ultimo '(' ')' raffigura un gruppo in regex

  • '\ w' raffigura parole (alfanumerico + sottolineatura)

  • '+' raffigura uno o più (cioè una o più delle alfanumerico + sottolineatura)

  • '' è un carattere speciale che rappresenta qualsiasi carattere (per esempio + significa uno o più caratteri). Perché questo è un personaggio speciale per rappresentare un '.' dovremmo dare un carattere di fuga con esso, cioè '.'

  • "someMethod" è dato come deve essere cercato.

  • I due parentesi '(', ')' sono date insieme con carattere di escape perché sono caratteri speciali che vengono utilizzati per descrivere un gruppo (si discuterà su gruppo nel punto successivo)

In sostituzione:

  • E 'dato '((TypeName) $ 1)', qui $ 1 rappresenta il gruppo . Ecco tutti i personaggi che sono racchiuse entro il primo e ultima parentesi '(', ')' nel campo di ricerca

  • assicurarsi di aver selezionato l'opzione 'espressione regolare' in trovare una scatola

    sostituire anche

Ulteriori informazioni su RegEx sono disponibili in http://regexr.com/.

Problemi correlati