Il metacarattere [] è stato definito composto perché esso in realtà è formato da una sequenza di caratteri racchiusi tra parentesi quadre. Da un punto di vista logico, però, tutto ciò che è racchiuso fra parentesi quadre è considerato come facente parte di un unico elemento base che viene valutato secondo le seguenti regole:
Le parentesi quadre servono a delimitare l'insieme dei caratteri con cui verificare la corrispondenza sulla stringa di input.
Qualora i caratteri da indicare fra parentesi quadre formano una sequenza ordinata, come ad esempio [abcdefg] oppure [0123456789], si può usare una sintassi semplificata, indicando il carattere iniziale e finale della sequenza separati da un simbolo - (meno).
[abcdefg] si può scrivere anche [a-g]
[0123456789] si può scrivere anche [0-9]
E' ammessa anche una sintassi mista: consideriamo l'elenco [a-glp-z56-9]; sono compresi in tale elenco i caratteri da a a g (a-g), il carattere l, i caratteri da p a z (p-z), il carattere 5 ed infine i caratteri da 6 a 9 (6-9).
Il simbolo -, all'interno delle parentesi quadre, ha il significato speciale di definire un intervallo.
Se lo stesso simbolo è indicato come primo carattere dell'elenco, perde il suo significato speciale e corrisponde solo a se stesso.
Il simbolo . all'interno dell'elenco perde il suo significato speciale (corrisponde a se stesso).
In generale tutti i simboli che all'esterno dell'elenco sono dei metacaratteri, all'interno dell'elenco o perdono il loro significato speciale, corrispondendo solo a se stessi, oppure cambiano il loro significato speciale. (un esempio di tale cambiamento si può notare nel metacarattere ^).
Se il primo carattere dopo la parentesi quadra aperta è il simbolo ^, allora la corrispondenza sarà verificata, anzichè sui caratteri che fanno parte dell'elenco, sui caratteri che invece non vi fanno parte (escluso il newline).
Tutto ciò che segue il simbolo ^ all'interno dell'elenco sarà escluso dalla corrispondenza.
Interessante è notare che, mentre il metacarattere . corrisponde ad un qualsiasi carattere escluso il newline, il metacarattere [^] corrisponde ad un qualsiasi carattere escluso il newline ed esclusi i caratteri indicati nell'elenco che segue il simbolo ^.
Se il simbolo ^ non è il primo carattere dell'elenco, esso non ha alcun significato speciale e quindi corrisponde solo a se stesso.
Qualora la parentesi quadra chiusa (]) deve far parte dell'elenco, come carattere per verificare una corrispondenza, è sufficiente che essa sia indicata come primo carattere dell'elenco, oppure, se la si vuole escludere dalla ricerca insieme a tutti i caratteri che eventualmente seguono, è necessario indicarla subito dopo il simbolo ^.
Se nell'elenco c'è anche il simbolo -, come carattere che deve corrispondere a se stesso, la parentesi quadra va posta subito dopo detto simbolo, che sarà quindi il primo carattere dell'elenco (oppure il secondo se il primo carattere dovesse essere il simbolo ^).
Lo standard POSIX per le regexp ha definito speciali classi di caratteri che possono essere rappresentate attraverso speciali simboli composti:
Classe | Descrizione |
---|---|
[:alnum:] | L'insieme di tutti i caratteri alfanumerici (lettere e numeri) compresi gli spazi bianchi |
[:alpha:] | L'insieme dei soli caratteri alfabetici, siano essi maiuscoli o minuscoli (corrisponde a [a-zA-Z]) |
[:digit:] | L'insieme di tutti i caratteri numerici (corrisponde a [0-9]) |
[:blank:] | L'insieme composto dal carattere spazio e dai caratteri di tabulazione |
[:space:] | L'insieme di tutti i tipi di spazi visualizzabili |
[:lower:] | L'insieme di tutti i caratteri alfabetici minuscoli |
[:upper:] | L'insieme di tutti i caratteri alfabetici maiuscoli |
[:punct:] | L'insieme di tutti i caratteri di punteggiatura |
[:graph:] | L'insieme di tutti i caratteri che sono visibili a video e allo stesso tempo stampabili (tutti i tipi di spazio sono esclusi) |
[:print:] | L'insieme di tutti i caratteri stampabili |
[:cntrl:] | L'insieme di tutti i caratteri di controllo (di norma non stampabile e non visibili) |
[:xdigit:] | L'insieme di tutte le cifre esadecimali |
Queste classi possono essere utilizzate nei pattern per ricercare una corrispondenza di un carattere che fa parte della classe specificata.
Da notare che i simboli di classe sono sempre racchiusi in una ulteriore coppia di parentesi quadre, cioè fanno sempre parte di un elenco, anche quando una di tali classi deve essere utilizzata da sola.