versione 1.03, 1 settembre 2022
 
 |  
 | 
Michele Liberi mail: mliberi@gmail.com cell: 3485211456  | 
Molti dei miei programmi fanno uso di espressioni regolari (RE), espressioni regolari estese (ERE), o espressioni di espressioni regolari (REE), da me realizzate con un insieme di funzioni scritte in linguaggio C.
Un'espressione regolare (RE) è una stringa che rappresenta un insieme di stringhe.
Un'espressione regolare estesa (ERE) è una lista di espressioni regolari separate tra loro con il carattere '|' (barra verticale). Rappresenta l'unione degli insiemi rappresentati dalle singole RE.
Un'espressione di espressioni regolari (REE) è una vera e propria espressione i cui operandi sono RE, connessi con i seguenti operatori in ordine decrescente di priorità:
| '' | apici singoli | se l'intera REE viene delimitata da apici singoli essa rappresenta una stringa, tutti i caratteri speciali perdono il loro significato | 
|---|---|---|
| () | parentesi tonde | tra le parentesi tonde si annida una sottoespressione, con un numero arbitrario di livelli | 
| ` | apice retroverso | minuscole e maiuscole vengono considerate diverse | 
| ~ | tilde | minuscole e maiuscole vengono considerate uguali | 
| ! | punto esclamativo | NOT | 
| & | e commerciale | AND | 
| | | barra verticale | OR | 
| \ | barra retroversa | annulla il significato speciale del carattere che segue | 
All'interno di una espressione regolare ci sono caratteri normali, che rappresentano sé stessi, e caratteri speciali:
| * | asterisco | qualunque stringa, compresa la stringa vuota | 
|---|---|---|
| ? | punto di domanda | qualunque singolo carattere | 
| [charset] | parentesi quadre | un singolo carattere appartenente ad un insieme | 
| \ | barra rovescia | serve per trattare come carattere normale un carattere speciale | 
Un charset è una stringa che definisce un insieme di caratteri, ed è composto da uno o più item separati dal carattere ',' (virgola), che vengono combinati tra loro con un operatore di unione, differenza, o complemento.
Ogni carattere all'interno di un charset rappresenta sé stesso, con alcune eccezioni:
| , | virgola | separa gli item | 
|---|---|---|
| ! | punto esclamativo | è un carattere speciale solo se posto come primo carattere di un item; è l'operatore di complemento: aggiunge all'insieme tutti i caratteri che NON appartengono all'item; | 
| - | meno | posto all'inizio di un item è l'operatore di sottrazione, posto tra due caratteri indica l'insieme di tutti i caratteri compresi tra i due estremi; | 
| \ | barra retroversa | serve per trattare come carattere normale un carattere speciale | 
Esempi:
| REE | meaning | 
|---|---|
| a* | una stringa che inizia con 'a' (a, aria, arancia, ...) | 
| ~a* | una stringa che inizia con 'a' oppure 'A' (a, aria, Arancia, ...) | 
| *e | una stringa che termina con 'z' (e, pane, sarde, ...) | 
| a*m*e | una stringa che inizia con 'a', contiene una 'm', e termina con 'e' (amore, amarene, ...) | 
| ??? | una stringa di tre caratteri (pio, san, ero, ...) | 
| [AEIOU] | una vocale maiuscola | 
| [A-Z,-AEIOU] | una consonante maiuscola, insieme ottenuto per differenza tra tutte le lettere maiuscole e le vocali maiuscole | 
| [!AEIOU] | tutti i caratteri tranne le vocali maiuscole, insieme ottenuto per complemento | 
| [0123456789] | una cifra decimale, avrei potuto scrivere [0-9] | 
| [0-9A-Fa-f] | una cifra esadecimale, avrei potuto scrivere [0-9,A-F,a-f] | 
| [A-Z,a-z] | un carattere alfabetico, maiuscolo o minuscolo | 
| !*j* | una stringa che NON contiene il carattere 'j' | 
| ?*@?*.?* | un indirizzo e-mail valido | 
| s??|(*m*&?????) | una stringa di tre caratteri che inizia con 's' o una stringa di 5 caratteri che contiene una 'm' |