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
[modifica]Formalmente 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
[modifica]Diciamo 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
[modifica]Per derivare il linguaggio dobbiamo definire alcuni concetti supplementari.
Sottoespressione
[modifica]Definiamo 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
[modifica]Definiamo '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
[modifica]Diciamo 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
[modifica]Il linguaggio definito da una espressione regolare è:
Diciamo che due RE sono equivalenti se definiscono lo stesso linguaggio.
Ambiguità delle RE
[modifica]Una 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
[modifica]Esempi 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