Perl/Espressioni regolari (oltre): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Nessun oggetto della modifica
 
Riga 4:
=== Prima , Match , Dopo ===
 
Quando chiediamo di fare un'operazione di match , il Perl mette a disposizione tre variabili che consentono di capire meglio "cosa" si è catturato:
$` contiene quello che c'è prima
$& contiene il match
Riga 52:
=== Raggruppare ===
 
Oltre alle variabili precedenti le espressioni regolari consentono di fare dei raggruppamenti : considerare un certo "gruppo di sintassi" come un unico elemento. La sintassi per specificare questa possibilità è mettere la sintassi fra '(' e ')'.
Vediamo allora come migliorare l'esempio precedente aggiungendo il caso di estrarre anche " vitavita " , " vitavita!! " e " vitavita? ".
L'espressione regolare in questo caso diventa : "\s+(vita)+[\s.!?]+" ciò che si trova fra parentesi viene trattato dal moltiplicatore come se fosse un'unica entità.
Riga 107:
Se si usano nell'espressione regolare occorre indicarli come \X dove X è una cifra.
Se si usano fuori dall'espressione regolare allora vengono memorizzati in $X dove X è una cifra.
Vediamo un esempio: voglio sapere se la parola "stringa" è presente due volte all'interno della frase.
L'espressione regolare potrebbe essere la seguente: "(stringa).*\1"
 
$stringa = "questa è la stringa di test e rimane una stringa !";
Riga 156:
if ( $stringa =~ m/\s(?:\w{4,4})+\s/ )
{
print "la stringa -$stringa- contiene una parola di multipla di 4 caratteri!\n";
print "parola è $&\n";
}
 
che produce:
la stringa -io contengo una parola di soli quattro caratteri- contiene una parola di multipla di 4 caratteri!
parola è contengo
 
Riga 167:
 
Se si vuole cercare qualcosa che si trova all'''inizio'' della stringa occorre mettere come primo carattere il carattere ^.
Se si vuole cercare qualcosa che si trova all'alla ''fine'' della stringa occorre mettere come ultimo carattere il carattere $.
Se volessi cercare la parola vita all'inizio della stringa (ma non in mezzo!) l'espressione regolare potrebbe essere : "^vita"
Vediamo un esempio:
 
Riga 232:
 
In questa sezione si parla del separatore di parola.
Con questo termine si indica il punto di inizio/fine di una parola. Negli esempi precedenti si è utilizzato lo spazio come elemento che separa una parola dalla successiva. Esiste un marcatore "più" preciso :
\b indica la ''sequenza'' \W\w o \w\W e si posiziona "nel mezzo".
\B è tutto quello che non è il \b
 
Occorre però capirne bene la sua utilità.
Con il separatore la parola viene già considerata e separata ( caso di /b ) o considerata e non separata ( caso /B ) dal resto delle parole. Infatti prendendo il punto in cui si verifica \w\W o \W\w la si è già considerata come estranea ied appartenente ad una certa sequenza.
Vediamo se con un esempio si chiarisce questo: applichiamoapplichiamolo alla ricerca della parola "vita" nell'esempio precedente:
 
foreach $stringa ( "che vita... stare in pace con il mondo"
Riga 297:
In inglese "lookahead" significa che durante la verifica dell'espressione regolare ne viene verificata la contemporaneità di un'altra (positivo) oppure la non contemporaneità di un'altra (negativo).
La sintassi è la seguente :
(?= ) per la positiva ;
(?! ) per la negativa .
comeCome per (?: ) non viene memorizzata in uno spazio in memoria, ma fa parte del match.
Vediamo questo esempio :
 
Riga 342:
=== Alternativa ===
 
Si è visto nel caso dei caratteri che era possibile specificare dei caratteri diversi mettendoli fra []. Nel caso di espressioni complesse invece viene incontro il simbolo |. Attenzione che questo NON si riferisce al singolo carattere ma al raggruppamento nel quale è usato.
Se per esempio voglio tutte le frasi con la parola vita eo morte posso usare la seguente espressione regolare: "vita|morte"
 
foreach $stringa ( "che vita... stare in pace con il mondo"
Riga 403:
=== Sii minimale ===
 
Quando si usano i moltiplicatori di caratteri , il Perl cerca la stringa che maggiormente di adatta alla sequenza cercata. A volte questo comportamento non è esattamente quello desiderato. Per dare istruzioni di come cercare si usa la sintassi "?" posta dopo il ripetitore.
Vediamone la sintassi :
{min,max}? inizia dal numero minimo e poi incrementa fino al massimo
{min,}? inizia dal numero minimo e poi incrementa
Riga 437:
 
È possibile scrivere una espressione regolare in una variabile e poi sostituirla nel match oppure mettere una variabile nell'espressione regolare.
Vediamo come modificare l'esempio precedente che cerca la stessa aprolaparola nella stringa:
$stringa = "questa è la stringa di test e rimane una stringa questa !";
Riga 481:
=== commenti (in linea) ===
 
Dato che le espressioni regolari possono essere molto complicate, segnarsi degli appunti, per quando cieventualmente sidovranno deveessere modificaremodificate, potrebbe tornare utile.
Per poter far questo basta usare la sintassi (?# ... ).
Per esempio : (?# ATTENZIONE: questo è un commento per i posteri !)