Classi di caratteri
Un parentesi quadrata aperta "[" inizia una classe di caratteri; una parentesi quadrata
chiusa "]" termina la definizione della classe. Di suo il carattere di parentesi
quadrata chiusa non ha significati speciali. Se occorre inserire la parentesi
chiusa all'interno di una classe di caratteri, questa deve
essere la prima lettera (ovviamente deve seguire il carattere "^",
se presente) oppure deve essere preceduta dal carattere di escape "\".
Una classe di caratteri identifica un singolo carattere nella stringa
oggetto di ricerca; il carattere deve comparire nel set di caratteri definito
dalla classe, a meno che il primo carattere della classe non sia l'accento
circonflesso "^", in tal caso il carattere non deve essere nel set definito
dalla classe. Se è richiesto l'inserimento del carattere "^" nel set definito
dalla classe, questo non deve essere la prima lettera dopo la parentesi di
apertura, oppure deve essere preceduto dal carattere di escape (\).
Ad esempio, la classe [aeiou] identifica ogni vocale minuscola,
mentre [^aeiou] identifica tutti i caratteri che non siano
delle vocali minuscole. Occorre notare che il simbolo "^" è
un modo pratico per indicare i caratteri che sono nella
classe, citando quelli che non lo sono. Questa non è una
asserzione: consuma un carattere della stringa oggetto
di ricerca e fallisce se ci si trova alla fine
del testo.
In un riconoscimento senza distinzione tra minuscole e maiuscole,
ogni lettera della classe identifica sia la versione maiuscola
sia la minuscola. Così, ad esempio, la classe [aeiou] identifica
sia "A" sia "a", e, in questo caso, [^aeiou] non identifica "A",
mentre con la distinzione delle maiuscole [^aeiou] identifica la lettera "A".
Il carattere di "a capo" (newline) non viene trattato in
modo speciale nelle classi di caratteri, indipendentemente
dalle opzioni PCRE_DOTALL
o PCRE_MULTILINE.
La classe [^a] riconosce sempre il carattere "a capo".
Il segno meno (-) può essere usato per definire un intervallo
all'interno della classe. Ad esempio, [d-m] identifica ogni
lettera compresa tra d ed m inclusi. Se occorre inserire il segno
meno (-) come carattere da riconoscere o lo si fa precedere dal carattere
di escape (\), oppure lo si mette in una posizione tale che non possa essere
identificato come definizione di un intervallo (ad esempio all'inizio o alla fine
della definizione della classe).
Non è possibile usare il carattere "]" come limite di un
intervallo. Un criterio definito come [W-]46], viene inteso
come una classe di due caratteri (W e -) seguita dalla stringa
46], in tal modo sarebbero riconosciuti i testi "W46]" oppure "-46]".
Quindi è necessario precedere la lettera "]" con il carattere di
escape (\), in questo modo [W-\]46], viene interpretata
correttamente come una singola classe contenente un range seguito
da due caratteri separati. In alternativa, per delimitare l'intervallo
si può utilizzare la notazione ottale di "]".
Gli intervalli utilizzano la sequenza di caratteri ASCII. Inoltre possono
essere utilizzati per definire caratteri con specifica numerica
(ad esempio [\000-\037]). Nei casi in cui si abiliti il riconoscimento
senza distinzione tra lettere maiuscole e minuscole, gli intervalli comprendenti
lettere identificano sia la lettera maiuscola che minuscola. Ad esempio, [W-c] è equivalente a
[][\^_`wxyzabc] (con il riconoscimento a prescindere dalla lettera maiuscole e minuscole), e, se
si utilizza la tabella dei caratteri locali francesi "fr", [\xc8-\xcb] identifica
la lettera "e" accentata sia maiuscola sia minuscola.
Nelle classi di caratteri si possono utilizzare le sequenze
\d, \D, \s, \S, \w e \W per aggiungere altri tipi di caratteri
alla classe. Ad esempio, [\dABCDEF] riconosce qualsiasi cifra
esadecimale. Il carattere "^" può essere utilizzato con i caratteri
maiuscoli per indicare un set di caratteri più ristretto
che l'identificazione del set di caratteri minuscoli. Ad
esempio, la classe [^\W_] identifica qualsiasi lettera o cifra
ma non il trattino basso (_).
Tutti i caratteri non alfabetici, eccetto \, -, ^ (posto
all'inizio) e ] non sono speciali per la classi di caratteri,
e non sono dannosi se preceduti dal caratteri di escape (\). Il terminatore
di criterio è sempre speciale e deve essere preceduto da \ quando usato
all'interno di un'espressione.
Perl supports the POSIX notation for character classes. This uses names
enclosed by [:
and :]
within the enclosing square brackets. PCRE also
supports this notation. For example, [01[:alpha:]%]
matches "0", "1", any alphabetic character, or "%". The supported class
names are:
Character classes
alnum | letters and digits |
alpha | letters |
ascii | character codes 0 - 127 |
blank | space or tab only |
cntrl | control characters |
digit | decimal digits (same as \d) |
graph | printing characters, excluding space |
lower | lower case letters |
print | printing characters, including space |
punct | printing characters, excluding letters and digits |
space | white space (not quite the same as \s) |
upper | upper case letters |
word | "word" characters (same as \w) |
xdigit | hexadecimal digits |
The
space
characters are HT (9), LF (10), VT (11), FF (12), CR (13),
and space (32). Notice that this list includes the VT character (code
11). This makes "space" different to
\s
, which does not include VT (for
Perl compatibility).
The name word
is a Perl extension, and blank
is a GNU extension
from Perl 5.8. Another Perl extension is negation, which is indicated
by a ^
character after the colon. For example,
[12[:^digit:]]
matches "1", "2", or any non-digit.
In UTF-8 mode, characters with values greater than 128 do not match any
of the POSIX character classes.