I metacaratteri sono dei tipi
particolari di caratteri utilizzati nelle espressioni regolari. Li introdurremo di seguito specificandone in breve il
significato:
() | le parentesi tonde delimitano una
sotto-stringa |
[] | le parentesi quadre delimitano la classe di appartenenza dei
caratteri che racchiudono |
{} | data una stringa o un singolo carattere, le
parentesi graffe ne possono stabilire il numero, un minimo, un massimo, o un intervallo in cui un carattere o una stringa
devono presentarsi |
^ | l'accento circonflesso indica il punto d'inizio di una
stringa, se si trova all'interno di una classe la nega |
$ | il dollaro in questo
caso non indica una variabile ma il punto finale di una stringa |
| il
backslash determina l'escape dei caratteri speciali (come ad esempio gli apici) |
? | il punto di domanda stabilisce l'assenza di occorrenze o una singola occorrenza di un
carattere o di una stringa |
+ | il segno pił stabilisce una singola occorrenza o
pił occorrenze di un carattere o di una stringa |
. | il punto fermo rappresenta un
carattere qualsiasi tranne l'acapo |
| | la barra (pipe), sostitutiva
dell'operatore OR, restituisce TRUE quando almeno uno degli argomenti è TRUE |
* | l'asterisco stabilisce nessuna o pił occorrenze di un carattere o di una
stringa |
Come anticipato, le
parentesi tonde delimitano una sotto-stringa, quest'ultima viene
interpretata letteralmente, cioè "(albero)" è realmente vista come insieme di caratteri
"albero".
Le parentesi tonde, vengono utilizzate con i metacaratteri che indicano le ripetizioni di una
sotto-stringa, ad esempio "(albero)?" indica la presenza o meno della stringa delimitata, oppure, individuano
caratteri che possono essere utilizzati per operazioni da compiere su altre stringhe, come per esempio sostituzioni.
Le
parentesi quadre, delimitano invece una classe di caratteri, quindi "
[albero]" non viene visto come
sotto-stringa, ma come classe composta dai caratteri "a,l,b..etc".
Nel caso appena esposto abbiamo
indicato tutti i caratteri compresi nella classe, ma potremmo anche stabilire un determinato intervallo, come ad esempio
"
[b-m]", quindi la nostra classe comprenderà tutti i caratteri compresi nell'intervallo
stabilito.
L'intervallo può anche essere di tipo numerico "
[0-7]", oppure potremmo
raffinare la nostra classe con l'ausilio di altri metacaratteri, ad esempio l'espressione
[b-m0-7?]{1,2}
indica
che i caratteri dell classe delimitata devono presentarsi da un minimo di una volta ad un massimo di due.
Come si
evince dall'ultimo esempio proposto e come già anticipato, le
parentesi graffe indicano un numero preciso, un
minimo, un massimo o un intervallo in cui un insieme di caratteri deve presentarsi in una stringa.
Quindi
"
{2}" indica un numero esatto (impone due presenze); "
{2,}" indica un minimo (impone almeno
due presenze); "
{,2}" indica un massimo (impone al massimo due presenze); "
{1,2}"
stabilisce un intervallo (almeno una presenza ma non pił di due).
Un'esempio abbastanza noto in cui possiamo
trovare un impiego massiccio di metacaratteri e quello relativo alla validazione di un indirizzo di posta
elettronica:
<?
$email = "mail@mail.info";
if(
ereg("^[a-z0-9][_.a-z0-9-]+@([a-z0-9][0-9a-z-]+.)+([a-z]{2,4})",$email)
)
{
echo "Indirizzo valido";
}else{
echo "Indirizzo non valido";
}
?>
Nello specifico abbiamo:
- ^[a-z0-9]
con il compito di controllare che nell'indirizzo si trovi del testo composto da caratteri compresi negli intervalli
"a-z" o "0- 9" (nel nostro caso, la sotto-stringa "mail" soddisfa i controlli e dà esito
positivo);
- [_.a-z0-9-] genera un controllo sulla presenza di caratteri come l'underscore (ma_il) o
il punto (ma.il);
- +@( controlla che nell'indirizzo sia presente il simbolo della chiocciola
(mail@);
- [a-z0-9][0-9a-z-] controlla la presenza di una sotto-stringa dopo la chiocciola
(@mail) le cui caratteristiche soddisfino gli intervalli di classe indicati tra parentesi quadre;
- +.)+
contolla che il punto fermo sia il quarto elemento presente (mail@mail.);
- ([a-z]{2,4}) ricerca
la presenza dell'estensione finale per una lunghezza non inferiore ai 2 caratteri e non superiore ai 4
(mail@mail.info).
Attenzione: questo articolo è stato concesso in esclusiva
per la pubblicazione a
Mrwebmaster.it; ne è vietata la
riproduzione, anche parziale, senza l'esplicito consenso dell'autore e della redazione di
Mrwebmaster.it.