Perl/Espressioni regolari (contesto)
Contesto
modificaFinora 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)
modificaVediamo aggiungendo una (o più) lettera in fondo alla sintassi /<espressione regolare>/ che possibilità offrono in più le espressioni regolari.
Non fermarti alla prima occorrenza
modificaCon 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