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' |