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]