Perl/Espressioni regolari (contesto)
Contesto
[modifica | modifica sorgente]Finora abbiamo visto l'operazione di match "fine a se stessa" cioè atta ad individuare se una certa stringa "corrisponde o no" a certi criteri.
Tuttavia se l'espressione regolare invece che in un contesto scalare ( all'interno di un if vuol dire "true" o "false" ) la si assegna ad un array , tutti i valori corrispondenti vengono assegnati all'array (in un'unica istruzione !). Vediamo questo esempio :
$stringa = "questo testo è composto di parole";
@parole = $stringa =~ /([^\s]+)/g;
print "la frase è composta dalle parole:\n";
print join("\n" , @parole)."\n";
che produce:
la frase è composta dalle parole: questo testo è composto di parole
NOTA : si è usato [^\s] al posto di \w perché i caratteri accentati non rientrano fra i caratteri "a-zA-Z_0-9".
Vediamo questo altro esempio :
$data = "2007/03/27"; ($anno , $mese, $giorno) = $data =~ m%(\d+)/(\d\d)/(\d\d)%g; print "la data è composta da:\n"; print join("\n" , $anno , $mese , $giorno)."\n";
che produce:
la data è composta da: 2007 03 27
Scorciatoie (lettera in fondo)
[modifica | modifica sorgente]Vediamo aggiungendo una (o più) lettera in fondo alla sintassi /<espressione regolare>/ che possibilità offrono in più le espressioni regolari.
Non fermarti alla prima occorrenza
[modifica | modifica sorgente]Con la lettera "g" si intende di non fermarsi alla prima occorrenza ma di cercare per tutta la "stringa".
Vediamo questo esempio :
$data = "2007/03/27;2006/02/26"; @el = $data =~ m%(\d{4,4})/(\d\d)/(\d\d)%g; print "I dati raccolti :\n"; print join( "\n" , @el )."\n";
che produce:
I dati raccolti : 2007 03 27 2006 02 26