Perl/Espressioni regolari (contesto)

Wikibooks, manuali e libri di testo liberi.
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