Michele Liberi software

versione 1.03, 1 settembre 2022

Michele Liberi
mail: mliberi@gmail.com
cell: 3485211456

liberix

espressioni regolari

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 singolise l'intera REE viene delimitata da apici singoli essa rappresenta una stringa, tutti i caratteri speciali perdono il loro significato
()parentesi tondetra le parentesi tonde si annida una sottoespressione, con un numero arbitrario di livelli
`apice retroversominuscole e maiuscole vengono considerate diverse
~tildeminuscole e maiuscole vengono considerate uguali
!punto esclamativoNOT
&e commercialeAND
|barra verticaleOR
\barra retroversaannulla il significato speciale del carattere che segue

All'interno di una espressione regolare ci sono caratteri normali, che rappresentano sé stessi, e caratteri speciali:

*asteriscoqualunque stringa, compresa la stringa vuota
?punto di domandaqualunque singolo carattere
[charset]parentesi quadreun singolo carattere appartenente ad un insieme
\barra rovesciaserve 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:

,virgolasepara 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;
-menoposto 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 retroversaserve per trattare come carattere normale un carattere speciale

Esempi:

REEmeaning
a*una stringa che inizia con 'a' (a, aria, arancia, ...)
~a*una stringa che inizia con 'a' oppure 'A' (a, aria, Arancia, ...)
*euna stringa che termina con 'z' (e, pane, sarde, ...)
a*m*euna 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'