2010-07-02 8 views
45

Vorrei cercare più file tramite eclissi per le seguenti 2 linee:Come si può cercare e sostituire 2 linee (insieme) via eclissi?

@Length(max = L_255) 
private String description; 

e sostituirli con questi due:

@Length(max = L_255, message="{validator.description.len}") 
private String description; 
+1

ha fatto la linea come codice per mostrare che è su 2 righe. CTRL + H non mi permette di aggiungere 2 righe per la ricerca e la sostituzione – Sam

risposta

36

ricerca sono multi-line di default in Eclipse quando si utilizza regex:

(\@Length\(max = L_255)\)([\r\n\s]+private) 

vorrei aggiungere "descrizione private String;"

(\@Length\(max = L_255)\)([\r\n\s]+private\s+?String\s+description\s*?;) 

sostituito dal seguente:

\1, message="{validator.description.len}")\2 

Funziona perfettamente in una ricerca di file innescato da un CTRL - H.

Eclipse multi-line search

Come accennato in answerTika 's, è possibile copiare direttamente le due linee selezionate nel 'Contenuto del testo' campo: quelle linee saranno convertito come regexp per voi da Eclipse.

+0

Vorrei aggiungere "descrizione stringa privata"; anche come parte della mia ricerca dal momento che la linea @Length (max = L_255) è presente anche per altri campi come "private String name". Quindi il suggerimento di cui sopra non funzionerà. – Sam

+0

Sto provando a cercare più righe successive. – Sam

+1

@ Samuel: immagine aggiunta, risposta aggiornata per tenere in considerazione la linea completa. Funzionerà per più linee successive. Provaci. – VonC

0

Selezionare la cartella che contiene tutti i file e premere Ctrl + H.

+0

non, CTRL + H non prende 2 linee, che è il mio problema – Sam

+0

Fate le linee separatamente? Oppure prova un'espressione regolare multilinea. –

+0

Non riesco a farlo separatamente poiché potrebbe interessare altri campi. Non ero in grado di capire l'espressione multilinea che identificherà correttamente le 2 righe sopra, quindi la domanda. – Sam

49

Un altro suggerimento su come ottenere la regex per un blocco selezionato. Aprire uno dei file che contiene le righe multiple (multilinea) da cercare o sostituire. Fare clic su Ctrl + F e selezionare "Espressione regolare". Chiudere la finestra Trova/Sostituisci. Selezionare il blocco necessario e fare nuovamente clic su Ctrl + F per aprire la finestra Trova/Sostituisci. Ora nella casella di testo Trova hai l'espressione regolare che corrisponde esattamente al tuo blocco di selezione.

(ho scoperto questo, solo dopo aver creato manualmente un'espressione regolare per molto tempo blocco :)

+0

molto buono! Grazie! +1 –

+0

Consiglio eccellente! Grazie, mi hai risparmiato un sacco di tempo per capire come costruire il mio regex. – Anth0

+1

È possibile utilizzare questo trucco per costruire la regex da copiare in una ricerca di file. Grande risparmio di tempo, grazie! – nerdherd

14

CTRL + H fa prendere due linee se utilizzare regexp (e non dover scrivere l'espressione regolare da soli, Eclipse lo fa per te).

  1. Seleziona le tue linee.
  2. Fare clic su CTRL + H. La finestra di dialogo di ricerca si apre. Se "Espressione regolare" è già selezionata, eclipse avrà convertito le due righe in cui si cerca regexp, quindi fai clic su Cerca. Se "espressione regolare", se non è già verificata "controllare e fare clic su Annulla (Eclipse ricorda vostra scelta).
  3. Selezionare nuovamente le linee.
  4. Fare clic su CTRL + H. La finestra di ricerca si apre. Questa volta" Regular espressione "è già selezionata.eclipse avrà convertito per te le due righe cercate in, quindi fai clic su Cerca.
+2

Mi piace la descrizione della soluzione migliore, semplice, veloce e infallibile. Thnx! – Daren

+0

seconda linea è gemma nascosta feature..Thanksss – nick

2

una punta rapida per l'inclusione di linee multiple come parte di un'espressione regolare costruito manualmente:

Dove si usa normalmente .* per adattarsi a qualsiasi carattere zero o più volte, invece considerano usando qualcosa come (?:.|\r?\n)*. Oppure aggiungi un extra ? alla fine per renderlo non-goloso.

Spiegazione: . non corrisponde nuove linee così bisogno di fare un "aut-aut": Le parentesi corrispondono sia il . prima che il tubo o la nuova linea dopo di esso. Lo ? dopo il \r rende il ritorno a capo prima dell'avanzamento di riga facoltativo per consentire a Windows o Unix nuove linee. Il ?: esclude l'intera cosa come un gruppo di acquisizione (che aiuta a evitare un overflow dello stack).

+0

Quando provo questo in Eclipse (4.5) come: 'inserzionista (: |?.? \ R \ n) *' mostra un errore nella finestra di dialogo "Trova modello troppo complesso" Modifica: aggiungendo il punto interrogativo alla fine come: 'editore (?:. | \ R? \ N) *?' Lo fa funzionare! Grazie per la spiegazione di punta e regex. – NathanChristie

+1

Ci sono alcuni casi in cui se aggiungo troppi caratteri nella seconda parola che voglio cercare, vedo ancora l'errore "Trova modello troppo complesso". Così 'inserzionista (: |?. \ R \ n?) * Id' opere ma' editore? (: |?. \ R \ n?) * Identification' visualizza l'errore? – NathanChristie

Problemi correlati