Perl/Espressioni regolari (contesto)

Indice del libro

Contesto

modifica

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

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

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