PATTERN MATCHING
E’ sicuramente una delle cose più utili del Perl, che lo rende un
linguaggio estremamente potente. Permette di cercare dei pattern
all’interno delle stringhe, ovvero delle particolari sottostringhe
descritte attraverso il linguaggio delle espressioni regolari. In
termini insiemistici, data un’espressione regolare:
Insieme delle stringhe non
descritte dall’espressione
regolare
Insieme delle stringhe
descritte dall’espressione
regolare
Insieme di tutte le stringhe
BIOINFO3 - Lezione 28
1
LE ESPRESSIONI REGOLARI
Le espressioni regolari vengono così chiamate per il tipo di linguaggio
(grammatica), appunto “regolare” che permette di definirle. La classificazione
delle grammatiche fu realizzata negli anni 50 da Noam Chomsky, famosissimo
linguista, filosofo, storico e politico, attualmente tra i leader carismatici del
movimento “no global”.
Ma cominciamo a vedere alcune espressioni regolari:
.
Riconosce un qualsiasi carattere, escluso il new-line
\n
Riconosce il carattere di new-line (“vai a capo”)
\t
Riconosce il carattere di tab
[ ]
Riconosce un solo carattere tra quelli indicati all’interno delle
parentesi, si può usare il simbolo – per indicare i caratteri compresi tra due
estremi (ad esempio da “a” a “z”, da “0” a “9”)
BIOINFO3 - Lezione 28
2
ESPRESSIONI REGOLARI: [ ]
Esempi:
[aeiou]
[oi]
riconosce una vocale
riconosce una o o una i
man[oi]
riconosce tutte le stringhe che contengono man seguita da o o
da i, ad esempio “mano” , “mani”, ma anche “amano”, “amanita”
.an[oi]
riconosce tutte le parole che contengono un qualunque
carattere seguito da an e da o oppure i, ad esempio “mano”, “mani”, “nano”, “
nani”, “l’anima”, “6anonimo” ma non “animali”
[a-z]
[A-Z]
[a-zA-Z]
[0-9]
riconosce una lettera minuscola
riconosce una lettera maiuscola
riconosce una lettera
riconosce una cifra (è uguale a [0123456789] o [4859013726])
BIOINFO3 - Lezione 28
3
ESPRESSIONI REGOLARI: [^ ]
[^ ] Riconosce un carattere diverso da quelli indicati all’interno delle
parentesi
[^0-9]
riconosce un qualsiasi carattere non numerico
[^a-zA-Z]
riconosce un qualsiasi carattere non alfabetico
Altri simboli:
\d
Riconosce una cifra (= [0-9])
\D
Riconosce un carattere diverso da una cifra (= [^0-9])
\w
Riconosce un carattere alfanumerico (= [a-zA-Z0-9])
\W
Riconosce un carattere non alfanumerico (= [^a-zA-Z0-9])
\s
Riconosce un carattere di “spaziatura” (spazi, new-line, tab,…)
\S
Riconosce un carattere non di spaziatura
BIOINFO3 - Lezione 28
4
ESPRESSIONI REGOLARI: ?
?
Il carattere o l’espressione regolare precedente (si possono usare le
parentesi) è facoltativa (compare 0 o 1 volte)
vai?
riconosce “vai” ma anche “va”, “Evvai!”, “divario” ovvero tutto ciò che
contiene “vai” o “va”
penn?a
riconosce “penna”, “pena” ma anche “appena”, ovvero tutto ciò che contiene
“penna” o “pena”
[1-2]?\d\d\d
riconosce un numero formato da 3 o 4 cifre. Se a 4 cifre, la prima è un 1
oppure un 2
BIOINFO3 - Lezione 28
5
ESPRESSIONI REGOLARI: *
*
Il carattere o l’espressione regolare precedente (si possono usare le
parentesi) può essere ripetuta 0 o più volte
sat20*
riconosce “sat2” ma anche “sat20”, “sat200”, “123sat231” ovvero tutto ciò che
contiene “sat2” seguito da un numero qualsiasi di zeri (anche nessuno)
[0-9]*
riconosce una sequenza di 0 o più cifre, quindi qualsiasi numero naturale o la
stringa vuota
ma*mma
riconosce “mmma”, “mamma”, “maamma”, “maaamma”, …
BIOINFO3 - Lezione 28
6
ESPRESSIONI REGOLARI: +
+
Il carattere o l’espressione regolare precedente (si possono usare le
parentesi) deve essere ripetuta 1 o più volte
sat20+
riconosce “sat20” ma anche “sat200”, “sat2000”, “123sat2031” ovvero tutto
ciò che contiene “sat2” seguito da almeno uno zero
[0-9]+
riconosce una sequenza di 1 o più cifre, quindi qualsiasi numero naturale
ma+mma
riconosce “mamma”, “maamma”, “maaamma”, …
{}
Se conosciamo il numero esatto di ripetizioni del carattere o
dell’espressione regolare precedente, tale numero si può indicare tra {}
es: ca{3}sa -> cerca tutto quello che contiene caaasa
BIOINFO3 - Lezione 28
7
ESPRESSIONI REGOLARI: |
|
Permette di scegliere tra due o più alternative (espressioni regolari)
pippo|pluto|pflip
Riconosce tutte le stringhe che contengono “pippo”, “pluto” o “pflip”, ad
esempio anche “plutone”, “Io mi chiamo pippo”
cas(a|etta)
Riconosce tutte le stringhe contenenti “casa” o “casetta” : era equivalente
scrivere cas(ett)?a
cass?(a|etta)
Riconosce tutte le stringhe contenenti “casa”, “cassa”, “casetta”, “cassetta”
BIOINFO3 - Lezione 28
8
CARATTERE DI ESCAPE
Il carattere \ funziona anche in questo caso da carattere di escape e permette
di far riconoscere anche i caratteri che danno significato alle espressioni
regolari
\\
Permette di riconoscere un \
\|
Permette di riconoscere un |
\+
Permette di riconoscere un +
\*
Permette di riconoscere un *
\?
Permette di riconoscere un ?
\.
Permette di riconoscere un .
\( \) Permettono di riconoscere le parentesi tonde
\[ \] Permettono di riconoscere le parentesi quadre
\{ \} Permettono di riconoscere le parentesi graffe
\(\w+\.\w+\)
riconosce un pattern formato da due stringhe alfanumeriche unite da un “.”
racchiuso tra parentesi tonde es: (123.AF63)
BIOINFO3 - Lezione 28
9
ESPRESSIONI REGOLARI: ^ e $
^
Indica che il pattern deve essere presente ad inizio della stringa (da
non confondere con il ^ all’interno delle parentesi quadre)
^mare
Riconosce tutte le stringhe che iniziano con “mare”: “mare”, “maremma”,
“maretta”,… ma non “amare” riconosciuto da mare (senza il ^).
$
Indica che il pattern deve essere presente alla fine della stringa
asso$
Riconosce tutte le stringhe che terminano con “asso”:”asso”,“materasso”,
“collasso”, … ma non “associato”, “rassomigliare” riconosciute da asso (senza
il $)
BIOINFO3 - Lezione 28
10
ESERCIZI
Scrivere l’espressione regolare che riconosce:
•Ad inizio stringa il simbolo di maggiore seguito da un numero qualsiasi di spazi
bianchi (anche 0) e da un codice alfanumerico di almeno 1 carattere
^> *\w+
•In qualunque punto della stringa la stringa cognome seguita immediatamente da : e
da almeno uno spazio bianco. Segue poi un cognome di una persona
cognome: +[A-Za-z ‘\-]+
•In qualunque punto della stringa o la stringa “ANNI:” seguita da un numero qualsiasi
di spazi (anche 0) e da un numero oppure la stringa “SESSO:” seguita da un numero
qualsiasi di spazi (anche 0) e da M o F
(ANNI: *\d+)|(SESSO: *[MF])
BIOINFO3 - Lezione 28
11
RIEPILOGO
•Espressioni regolari:
•[ ] e [^ ]
•?
•*
•+
•{ }
•|
•\
•^ e $
BIOINFO3 - Lezione 28
12
Scarica

bioinfo3-28 - CRIBI Genomics