L’importanza di saper cercare: le Regular Expressions.

Quando si deve effettuare una ricerca è necessa sapere come cercare e sapere tutti gli strumenti che ci vengono in aiuto. Fin dall’inizio è stato presente nella ricerca la distinzione tra maiuscole e minuscole, e anche parole intere o non. Ma da non molto si trova anche la ricerca con le Regular Expressions.
Le reguar expressions permettono di cercare (e non solo), cercando in modo meno pignolo e abbozzato.
Immaginando di dover cercare tutte le occorrenze della parola POTATO per poi, forse, modificarle con APPLE, ciò che si potrebbe pensare si fare in principio potrebbe essere cercare proprio POTATO, ma ci si accorgerebbe che sostituendo con APPLE, i plurali verrebbero sballati (POTATOES => APPLEES).
Si potrebbe pensare anche di cercare con lo spazio successivo, “POTATO ” e modificarlo con “APPLE “, ma ci sia accorgerebbe che se seguito da una punteggiatura (POTATO,) questo verrebbe ignorato.
Dunque bisognerebbe farlo in più passaggi, e questo potrebbe diventare un problema anche molto più complicato di questo.
In questo caso e molti altri, possono venirci in aiuto le Regular Expressions.
A chi possono servire?
Le regular expressions possono servire a chiunque abbia a che fare con il PC (eccetto chi fa grafica, video e suono).
Sono infatti utili non solo per i testi e file di testo, ma sono utili anche per interrogazioni di un certo livello su Database, sebbene ogni DB abbia la sua sintassi.
MySQL (dalla versione 3.23.4) | SELECT nome, email FROM utenti WHERE REGEXP_LIKE(email, ‘esempio.(it|com|org)$’); |
PostgreSQL (dalla versione 7.x) | SELECT nome, email FROM utenti WHERE email ~* ‘esempio.(it|com|org)$’; — * per ignorcase |
Oracle (dalla versione 10g) | SELECT nome, email SELECT nome, email FROM utenti WHERE REGEXP_LIKE(email, ‘esempio\.(it|com|org)$’); |
Cosa sono le Regular Expressions
Le Regular expression sono stringhe di ricerca interpretate per permettere una ricerca meno fissa.
Immaginando di dover cercare una stringa contenente P seguito da una vocale e poi ZZA, per cercare sia PAZZA, sia PEZZA, sia PIZZA, sia POZZA che PUZZA, aziché cercarlo cinque volte basterà cercare P(A|E|I|O|U)ZZA: questo troverà tutte le occorrenze di una qualunque tra queste parole in un sol colpo.
Cheat Sheet
Ancore
^ | Inizio della stringa o inizio della riga in uno schema multi-linea |
$ | Fine della stringa o fine della riga in uno schema multi-riga |
\b | Confine di parola |
\B | Non confine di parola |
Classi di carattere
\s | Spazio bianco |
\S | Non spazio bianco |
\d | Cifra (Digit) |
\D | Non cifra |
\w | Parola |
\W | Non parola |
Gruppi e intervalli (gli intervalli sono inclusivi)
. | Qualsiasi carattere eccetto nuova riga (\n) |
(a|b) | Oppure (a o b) |
[abc] | Tra (a o b o c) |
[^abc] | Non tra (non a o b o c) |
[a-q] | Nell’intervallo (lettera minuscola tra a e q) |
[A-Q] | Nell’intervallo (lettera maiuscola tra A e Q) |
[0-7] | Nell’intervallo (cifra tra 0 e 7) |
Quantificatori
* | 0 o più ripetizioni |
+ | 1 o più ripetizioni |
? | 0 o 1 ripetizioni |
{3} | Esattamente 3 ripetizioni |
{3,} | 3 o più ripetizioni |
{3,5} | da 3 a 5 ripetizioni |
Sequenze di escape e caratteri speciali
\ | Escape del carattere seguente |
\Q | Inizia la sequenza letterale |
\E | Fine sequenza letterale |
\n | Nuova linea |
\r | Ritorno ad inizio linea (usato nei sistemi Windows) |
\t | Tab |
Greedy / Lazy
<div>.*?</div> | in <div>primo</div><div>secondo</div> prende <div>primo</div> |
<div>.*</div> | in <div>primo</div><div>secondo</div> prende <div>primo</div><div>secondo</div> ed è così di default |
Per ulteriori informazioni è disponibile un Regular Expressions Cheat Sheet oltre la guida Regular expressions che trovate nei bookmarks.