Espressioni Regolari

Transcript

Espressioni Regolari
Espressioni Regolari
Giancarlo Massidda
Espressioni regolari
• O RegEx dall’inglese “regular expression”
• Traduzione errata: dovrebbe essere
espressioni basate su regole
• Si tratta di un sistema per descrivere come è
fatta una stringa (sequenza di zero o più
caratteri)
• Usate soprattutto per la ricerca di stringhe nel
testo o per la sostituzione di queste ultime.
Esempi di utilizzo
• Filtrare l’output dei comandi della shell di
linux.
– Come posso trovare tutte e sole le directory con il
comando ls?
• Trova e sostituisci con editor di testo avanzato.
– Devo evidenziare gli indirizzi di posta elettronica
• Analizzare dei testi all’interno di programmi.
– Devo estrarre dei dati da un file di testo.
Notazione
• Si userà il corsivo sottolineato ^ciao.*? per
indicare le espressioni regolari.
• Le stringhe verranno evidenziate usando il
grassetto io sono una stringa.
Componenti
•
•
•
•
•
•
Letterali
Metacaratteri
Quantificatori
Caratteri speciali
Parentesi
Sequenze di escape
Letterali
• Caratteri semplici, detti letterali: non hanno
alcun significato particolare.
• I letterali sono le lettere maiuscole e
minuscole, i numeri e l’underscore “_”
purché non preceduti dalla barra inversa “\”
• Pippo rappresenta la stringa Pippo
(notare il case sensitive)
Metacaratteri
• Un metacarattere o carattere jolly o wild
character o wildcard character è un carattere che,
all'interno di una stringa, non rappresenta sé
stesso bensì un insieme di altri caratteri o
sequenze di caratteri.
• Esempio: il punto (dot) . in una espressione
regolare rappresenta qualsiasi carattere.
• P.ppo può significare Pippo ma anche
– Pappo
– P%ppo
– P ppo
Caratteri speciali
• ^ rappresenta l’inzio della riga
• $ rappresenta la fine della riga
quantificatori
• Indicano quante volte deve essere ripetuto il
carattere che precede
– Asterisco (*) zero o più occorrenze
Ab*c significa: Ac Abc Abbbbbbbc
– Più (+) una o più occorrenze
Ab+c significa: Ac Abc Abbbbbbbc
– Punto esclamativo (?) o zero od una
Ab?c significa: Ac Abc Abbbbbbbc
Parentesi
• Le parentesi tonde () raggruppano le
espressioni regolari in sotto espressioni
• Le parentesi quadre [] vengono utilizzate per
indicare classi di carattere o alternative
P[ao]ne significa Pane o Pone
• Le parentesi graffe {} vengono utilizzate per
contare le occorrenze cercate Pa{1,2}ne
significa Pane Paane non significa Paane
Sequenze di escape
• Rappresentano caratteri “non stampabili” o insiemi di
caratteri o i letterali dei caratteri con significato
particolare
• Vediamo alcuni esempi:
– \n rappresenta l’”a capo”, \t la tabulazione
– \s indica un carattere appartenente all’insieme degli spazi
(spazio, a capo o tabulazioni)
– \w rappresenta qualsiasi carattere alfanumerico
– A\wZ rappresenta le stringhe: AxZ A5Z
Non rappresenta invece AaaZ A Z
– \. Rappresenta il carattere punto
– \* Rappresenta il carattere asterisco
Il comando grep
• In informatica grep (general regular expression
print) è un comando dei sistemi Unix e Unixlike, e più in generale dei sistemi POSIX[1] e
GNU[2], che ricerca in uno o più file di testo le
linee che corrispondono ad uno o più modelli
specificati con espressioni regolari o stringhe
letterali, e produce un elenco delle linee (o
anche dei soli nomi di file) per cui è stata
trovata corrispondenza. È un tipo di filtro.
Il comando cat
• cat legge il contenuto di un file e lo manda a
schermo.
• Usato in combinazione con grep per cercare
all’interno di un file
Esempi pratici
• Vogliamo trovare tutti i file e directory
nascoste.
la | grep “^\.”
• Vogliamo trovare tutte le directory
ll | grep “^d”
• Vogliamo trovare tutte le directory nascoste
ll | grep ^d | grep “ \..*\$”
• Vediamo come farlo con ls e grep
Esempio pratico 2
• Vogliamo estrarre dal file “indirizzi.txt” tutte le
righe che contengono indirizzi di posta
elettronica validi
Esempio 3
• Modificare, con scite, un file html in maniera
tale che gli indirizzi di posta elettronica
vengano messi in grassetto.
GRAZIE
[email protected]