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