Appendice A. Le espressioni regolari

Anders Lund

Traduzione: Luciano Montanaro
Questa appendice contiene introduzione un'essenziale al mondo delle espressioni regolari. Documenta le espressioni regolari nella forma disponibile in KatePart, che non è compatibile con quella di perl né con quella disponibile, per esempio, in grep.

Introduzione

Le espressioni regolari ci forniscono un modo di descrivere il contenuto richiesto di una stringa di testo in modo comprensibile dal software, al fine di verificare se una sequenza di testo corrisponde al modello fornito; nel caso di applicazioni avanzate, permettono di memorizzare parti del testo corrispondenti.

Un esempio: diciamo che vuoi cercare nel testo tutti i paragrafi che iniziano per uno dei nomi «Henrik» o «Pernille» seguiti da una qualche forma del verbo «say».

In una ricerca normale cominceresti a trovare il primo nome, «Henrik», magari seguito da «sa», così: Henrik sa; esaminando le corrispondenze dovresti scartare tutte quelle in cui non si trovano all'inizio di un paragrafo, oltre a quelle in cui le parole che iniziano per «sa» non sono né «says»«said». E tutto ciò dovrà essere ripetuto con l'altro nome...

Con le espressioni regolari questo compito può essere svolto con una sola ricerca, e con una precisione più elevata.

Per farlo, le espressioni regolari definiscono delle regole per esprimere nel dettaglio una generalizzazione di una stringa da confrontare. Il nostro esempio, che potremmo esprimere in questo modo: «Una riga che inizia con Henrik o Pernille (forse preceduti da fino a quattro caratteri di spazio o tabulazione) seguiti da un carattere di spaziatura seguito da sa e poi, o ys o id», può essere espresso con la seguente espressione regolare:

^[ \t]{0,4}(Henrik|Pernille) sa(ys|id)

L'esempio appena introdotto dimostra i quattro concetti alla base delle moderne espressioni regolari, cioè:

  • I modelli

  • Le asserzioni

  • I quantificatori

  • I riferimenti all'indietro

Il carattere di accento circonflesso (^) che appare all'inizio dell'espressione è un'asserzione, che è vera solo se il resto della stringa da confrontare è all'inizio di una riga.

Le stringhe [ \t] e (Henrik|Pernille) sa(ys|id) sono modelli. Il primo è una classe di caratteri che corrisponde a un carattere di spazio o di tabulazione (orizzontale); l'altro modello contiene prima un sotto-modello che corrisponde a Henrik o Pernille, poi un gruppo di caratteri che corrisponde letteralmente a sa, ed infine un sotto-modello che corrisponde a ys o id

La sequenza {0,4} è un quantificatore che indica «da zero a quattro ripetizioni dell'espressione precedente».

Poiché il software per le espressioni regolari che gestisce il concetto di riferimento all'indietro salva l'intera sequenza di caratteri che corrisponde al modello oltre ai sottomodelli racchiusi fra parentesi, se ci fosse modo di accedere a tali riferimenti potremmo mettere le mani sull'intero testo corrispondente al modello (in caso di ricerca di un'espressione regolare in un editor di testo la corrispondenza è indicata come selezionata) oppure al nome trovato, o all'ultima parte del verbo.

Nell'insieme l'espressione corrisponderà a quello che vogliamo, e solo a quello.

Le sezioni seguenti descriveranno in dettaglio come costruire e usare i modelli, le classi di caratteri, le asserzioni, i quantificatori ed i riferimenti all'indietro, mentre la sezione finale fornirà qualche utile esempio.