| \ |
Quota il carattere successivo |
| ^ |
Matcha l'inizio della linea |
| . |
Matcha qualsiasi carattere (eccetto il newline) |
| $ |
Match la fine della linea |
| | |
Alternative |
| () |
Raggruppamento |
| [] |
Classi di caratteri |
| * |
Matcha 0 o più volte |
| + |
Matcha 1 o più volte |
| ? |
Matcha 1 o 0 volte |
| {n} |
Matcha esattamente n volte |
| {n,} |
Matcha almeno n volte |
| {n,m} |
Matcha almeno n volte ma non più di m volte |
| \w |
Matcha un carattere "word" (alfanumerici e "_") |
| \W |
Matcha un carattere "non-word" |
| \s |
Matcha un carattere di spazio bianco |
| \S |
Matcha un carattere non di spazio bianco |
| \d |
Matcha un carattere numerico |
| \D |
Matcha un carattere non numerico |
Abbiamo detto che il perl è un linguaggio molto versato per
l'elaborazione di testo. Questo è dovuto al fatto che le stringhe sono
un tipo di dato primitivo, alla interpolazione di stringhe e alle
potenti espressioni regolari che fanno parte integrante del
linguaggio. In un certo senso le espressioni regolari sono l'arma
segreta dei programmatori Perl: sono molto comuni in Unix (molti
comandi le utilizzano), ma in Perl sono allo stato dell'arte.
Le espressioni regolari sono espressioni che descrivono
stringhe. L'operazione principale che si fa su una espressione
regolare è il "matching", cioè la verificano della corrispondenza (il
"match") di una stringa con una espressione regolare. Per esempio
l'espressione regolare /p.p*o/ matcha una stringa che comincia per "p"
seguita da un carattere qualsiasi (il "." matcha una occorrenza di
qualsiasi carattere) seguito da una sequenza di 0 o più p ("p*": lo
"*" è un iteratore del carattere precedente". Le "/" sono solo
delimitatori dell'espressione regolare. Quindi "poppo", "pipo"
matchano, mentre "piippo" no.
Le espressioni regolari sono utilizzate come argomento da alcuni
operatori. Uno è l'operatore di matching puro, "m" appunto, che
restituisce vero o falso a seconda se l'espressione regolare ha
matchato oppure no. Ma abbiamo anche l'operatore "s" di sostituzione
che sostituisce la stringa matchata da un'espressione regolare con
un'altra, e l'operatore di translazione "tr" che sostituisce singoli
caratteri: li abbiamo visti nell'esempio che conta le parole.
E' molto utile la possibilità di "catturare" singole parti
dell'espressione regolare matchata. Per esempio:
$_=`date`; m/\w+ (\w+) (\d+) (\d+):(\d+):\d+ \w+ \w+ (\d+)/; print "Sono le ore $3 e $4 minuti del $2 $1 $5\n"; |
Dopo aver letto la data, la si assegna a $_ (il backtick ("`")
esegue un comando e ne "cattura" l'output). Il comando "date" produce
un output di questo tipo:
Tue Apr 16 06:10:11 MET DST 1996
L'espressione regolare esamina questo output e ne estrae alcuni pezzi
("\w" matcha caratteri alfabetici, mentre "\d" matcha caratteri
numerici). Le parti dell'espressione matchata racchiuse tra parentesi
nell'espressione regolare sono assegnate alle variabili $1, $2, e così
via. Quindi dopo aver effettuato il parsing si stampa il risultato in
un formato più leggibile utilizzando l'interpolazione di stringhe.
|