Espressioni regolari

Che sono costoro?


Uno dei tanti punti di forza dei sistemi Unix sono le espressioni regolari.
Ma cosa sono le espressioni regolari altrimenti chiamate in inglese regular expressions o regexp dal nome della funzione C che le aveva implementate?
Si tratta di una tecnica che permette di capire se una stringa di caratteri verifica o meno determinate caratteristiche utilizzando una maschera (o pattern) che descriva queste caratteristiche.
All'interno dei sistemi Unix molti sono gli strumenti in grado di utilizzare questa tecnica. Uno dei più noti è il comando grep.
Vediamo un esempio di come si puņ usare una espressione regolare con grep.

[bruno@localhost tmp]$ grep [Rr]oma prova?.txt
prova1.txt:Questo è un testo di prova scritto da un romano.
prova2.txt:Questo testo di prova è stato scritto a Roma.
[bruno@localhost tmp]$

L'espressione regolare di questo esempio è in grado di identificare qualsiasi stringa dove compaia a scelta uno dei caratteri inclusi tra parentesi quadre, seguito dalla stringa "oma".
Le espressioni regolari sono supportate da molti programmi Unix. Tra i tanti possiamo citare gli editor vi e sed o i linguaggi awk, perl e php.
Esistono due tipi fondamentali di notazione per le espressioni regolari:
La Basic Regular Expression (BRE) e la Extended Regular Expression (ERE). Per capire quale notazione dovete usare consultate le pagine di man relative al programma che intendete usare o ferificate tra la documentazione del vostro sistema operativo.
Nel seguito di questa descrizione delle espressioni regolari ci riferiremo alle ERE che state implementate nel linguaggio perl ma anche in altri programmi e linguaggi.
La seguente tabella mostra le regole per interpretare le espressioni regolari ERE.

Espressione Significato
. Corrisponde a qualsiasi carattere tranne nuova linea.
x* Corrisponde a 0 o più occorrenze del carattere x.
x+ Corrisponde a una o più occorrenze del carattere x.
x? Corrispnde a 0 o a una occorrenza del carattere x.
[...] Corrisponde ad uno qualsiasi dei caratteri tra parentesi quadre.
x{n} Corrisponde ad n occorrenze esatte del carattere x.
x{n,} Corrisponde ad n o più occorrenze del carattere x.
x{,m} Corrisponde a 0 o al massimo m occorrenze del carattere x.
x{n,m} Corrisponde almeno ad n occorrenze e al massimo ad m occorrenze di x.
^ Corrisponde all'inizio della riga.
$ Corrisponde alla fine della riga.
\0 Corrisponde ad un carattere nullo.
\b Corrisponde ad un backspace.
\B Corrisponde a qualsiasi carattere che non si trova all'inizio o alla fine di una parola.
\cX Corrisponde a CTRL+x.
\d Corrisponde ad un singolo numero.
\D Corrisponde ad un carattere non numerico.

Per le precedenze ci si può riferire alla seguente tavola:
Precedenze ERE dall'alto al basso
Raggruppamenti tra parentesi quadre [= =] [: :] [. .]
Caratteri speciali \<Carattere speciale>
Espressioni tra parentesi quadre [ ]
Raggruppamenti ( )
Carattere singolo e moltiplicatori di caratteri * + ? {m, n}
Concatenazione  
Ancore ^ $
Alternativa |
Per esempio la ERE abba|cde ha riscontro per la stringa abba e la stringa cde, maggiore che per le stringhe abbade o abbcde perché la concatenazione ha un livello di precedenza più alto dell'alternativa.


            HOME  INDICE  POSTA