Search and replace su Eclipse con le regular expression

Dopo aver visto una serie di shortcut di Eclipse vediamo in questo post come sfruttare le regular expression per manipolare un testo. Le regular expression vi spaventano e state per chiudere la pagina? Aspettate ancora un attimo, vedremo che anche usando solo i costrutti base delle regular expression si possono ottenere risultati interessanti.

Search and replace su Eclipse

La shortcut Ctrl+F è un classico di tutti gli editor di testo a parte il blocco note di windows (il perché su blocco note sia diversa resta un mistero!). Su Eclipse la finestra di dialogo che compare consente non solo di cercare un testo all’interno di un file ma anche di eseguire una sostituzione del testo trovato:


Find e replace su Eclipse

Replace/Find è il comando più utile nel caso di sostituzioni multiple, effettua una sostituzione e seleziona il successivo match. Ma avete mai provato a cliccare sul checkbox Regular expression?

Regular expression su Eclipse

Se selezioniamo il checkbox regular expression possiamo scrivere una regexpr nel text field Find, premendo il classico Ctrl+spazio abbiamo anche un autocomplete che ci suggerisce i principali costrutti utilizzabili. Vediamo un esempio concreto, supponiamo di avere un file csv con un elenco di utenti:

Nome1,Cognome1,20
Nome2,Cognome2,40
Nome3,Cognome3,25
Nome4,Cognome4,45
Nome5,Cognome5,23

Vediamo come trasformare questo elenco di dati in un elenco di comandi di insert sql. La regular expression da usare è molto semplice, infatti possiamo utilizzare un semplice (.*),(.*),(.*). In una regular expression il punto identifica un qualunque carattere, l’asterisco indica che un elemento può essere ripetuto più volte. Con le parentesi tonde raggruppiamo una serie di caratteri in modo da poterci far riferimento successivamente. In pratica la regular expression scritta permette di eseguire il match su tre stringhe qualunque separate da virgola.

Vediamo adesso cosa scrivere nel text field Replace with, la cosa da sapere è che il primo match è referenziabile con $1, il secondo con $2 e così via. Tutta la stringa originale è identificata con $0. Detto questo ci basta scrivere la seguente stringa nel campo Replace with:

insert into persone(nome, cognome, eta) values('$1', '$2', $3);



Clicchiamo su Replace/Find (o su Replace All se siamo sicuri di ciò che stiamo facendo) per ottenere il risultato finale:

insert into persone(nome, cognome, eta) values('Nome1', 'Cognome1', 20);
insert into persone(nome, cognome, eta) values('Nome2', 'Cognome2', 40);
insert into persone(nome, cognome, eta) values('Nome3', 'Cognome3', 25);
insert into persone(nome, cognome, eta) values('Nome4', 'Cognome4', 45);
insert into persone(nome, cognome, eta) values('Nome5', 'Cognome5', 23);

Ovviamente questo è un esempio molto semplice che serve solo per dimostrare l’utilizzo, avremmo potuto ottenere lo stesso risultato con un po’ di pazienza e qualche copia incolla! Ma su file molto lunghi le regular expression possono rivelarsi molto utili per evitare copia incolla ripetuti.

Fabio Collini

Software Architect con esperienza su piattaforma J2EE e attualmente focalizzato principalmente in progetti di sviluppo di applicazioni Android. Attualmente sono in Nana Bianca dove mi occupo dello sviluppo di alcune app Android. Coautore della seconda edizione di Android Programmazione Avanzata e docente di corsi di sviluppo su piattaforma Android. Follow me on Twitter - LinkedIn profile