Linguaggi ed espressioni regolari
In questa lezione analizzeremo la famiglia delle espressioni regolari (in inglese regular expression o, in forma abbreviata, regexp, regex o RE) di cui si invita a leggere come introduzione la relativa pagina di Wikipedia.
Definizione
modificaFormalmente definiamo espressione regolare una stringa costruita su un alfabeto e in unione ai seguenti metasimboli:
- : insieme vuoto
- : unione (notazione alternativa: )
- : concatenazione
- : star
- : parentesi
Una RE è detta ben formata se si presenta in una delle seguenti forme:
- o
- o (notazione alternativa)
dove e sono a loro volta espressioni regolari. Si noti che la precedenza degli operatori è:
Definiamo inoltre altri operatori non essenziali ma frequentemente usati, utilizzando solo le proprietà sopra descritte:
- (potenza)
- con (ripetizione)
- (intervalli ordinati)
Altri operatori possono essere quelli insiemistici teorici: intersezione, differenza e complemento. Una espressione regolare che contiene questi operatori è detta espressione regolare estesa. Nota: Il potere espressivo di una RE estesa non è maggiore di quello di una RE standard.
Definizione di linguaggio regolare
modificaDiciamo che un linguaggio è un linguaggio regolare se è denotato da una RE. Formalmente, un linguaggio regolare è un linguaggio su un alfabeto che ha una corrispondente RE in accordo con la seguente tabella:
Espressione | Linguaggio |
---|---|
|
|
|
|
Denotiamo con la famiglia di tutti linguaggi regolari e con la famiglia di tutti i linguaggi finiti (cioè con cardinalità finita).
Allora possiamo dire che:
(intuibile: un linguaggio finito può sempre essere visto come l'unione di un numero finito di stringhe, ognuna delle quali concatenazione di un numero finito di simboli dell'alfabeto)
Derivare il linguaggio dalla RE
modificaPer derivare il linguaggio dobbiamo definire alcuni concetti supplementari.
Sottoespressione
modificaDefiniamo sottoespressione (in inglese subexpression o SE) una ben parentizzata sottostringa di una RE che si presenta nelle parentesi più esterne.
Chiariamo con un esempio. Sia data la RE:
questa RE ha due SE: e , mentre e NON sono SE di , ma sono SE di .
Versione numerata
modificaDefiniamo 'versione numerata di una RE, la RE a cui vengono aggiunti i numeri alle lettere che compongono la RE, in modo da differenziale le lettere uguali. Anche qui chiariamo il concetto con un esempio:
la sua versione numerata è:
Questa notazione è importante per definire l'ambiguità di un linguaggio (introdotta nelle sezioni successive).
Scelta e derivazione
modificaDiciamo che una RE è una scelta (in inglese choice) di un'altra RE nei seguenti casi:
- è una scelta di
- è una scelta di e
- è una scelta di
Diciamo che una SE deriva da (scritto come se:
- è una scelta di ;
- oppure, è una scelta di per ogni
La derivazione può avvenire più volte allo stesso modo. In questo caso scriviamo:
-
- se , , ..., con fisato
-
- se , , ..., con
-
- se , , ..., con
Esempi
modifica- o equivalentemente o ancora
- o equivalentemente o ancora
Linguaggio definito da un RE
modificaIl linguaggio definito da una espressione regolare è:
Diciamo che due RE sono equivalenti se definiscono lo stesso linguaggio.
Ambiguità delle RE
modificaUna stringa di un linguaggio regolare può essere derivato dalla RE in modi differenti, cioè attraverso distinte derivazioni. Diciamo che una RE è ambigua se esiste una stringa derivabile attraverso due distinte derivazioni che non differiscono solo dall'ordine di applicazione.
Esempio:
Ambigua, due modi di derivazione di :
Condizione sufficiente affinché una RE sia ambigua, se il linguaggio generato dalla RE in versione numerata include due stringhe che coincidono a meno dei numeri.
Esempio:
Genera:
- ...
Come si vede eliminando i numeri, la stringa 2 coincide con la stringa 7, perciò la RE è ambigua.
Proprietà di chiusura
modifica
«Un insieme è chiuso rispetto a un'operazione se e solo se ogni insieme ottenuto applicando l'operazione ai membri dell'insieme originale, l'insieme ottenuto è contenuto nell'insieme originario» |
è chiuso rispetto alla concatenazione, unione e star (quindi anche per gli altri operatori sopra descritti).
Link e riferimenti
modificaEsempi pratici - https://www.evemilano.com/come-funzionano-le-espressioni-regolari-regex/
Altri progetti
modifica- Wikibooks contiene testi o manuali sulle espressioni regolari
- Wikipedia contiene informazioni sulle espressioni regolari
- Wikimedia Commons contiene immagini o altri file sulle espressioni regolari