Successivo: Impostazione opzioni, Precedente: Circonflesso/dollaro/punto, Su: regexp Perl [Contenuti][Indice]
Una parentesi quadra aperta introduce una classe di caratteri, delimitata da una parentesi quadra chiusa. Una parentesi quadra chiusa in sé non ha un significato speciale. Se una parentesi quadra chiusa deve servire come componente di una classe di caratteri, dovrebbe essere il primo carattere inserito nella classe (eventualmente dopo l’accento circonflesso, se ce n’è uno) o protetta con una barra inversa.
Una classe di caratteri corrisponde a un singolo carattere nella stringa in esame; il carattere deve appartenere all’insieme dei caratteri che compongono la classe, a meno che il primo carattere della classe non sia un accento circonflesso, nel qual caso il carattere nella stringa in esame non deve appartenere all’insieme definito dalla classe. Se un accento circonflesso deve appartenere a una classe, assicuratevi che non sia il primo carattere, oppure proteggetelo con una barra inversa.
Per esempio, la classe di caratteri [aeiou]
corrisponde a qualsiasi
vocale minuscola, mentre [^aeiou]
corrisponde a qualsiasi carattere
che non sia una vocale minuscola. Si noti che un accento circonflesso è
solo una notazione conveniente per specificare i caratteri che appartengono
a una classe enumerando invece quelli che non vi appartengono. Non si tratta
di una dichiarazione: infatti "consuma" un carattere nella stringa in esame,
e non è soddisfatta se il puntatore corrente si trova alla fine della
stringa in esame.
Quando si imposta una corrispondenza SENZA distinzione maiuscole-minuscole,
ogni lettera in una classe la rappresenta sia scritta in minuscolo che in
maiuscolo, e quindi per esempio [aeiou]
corrisponde sia a delle ‘A’
maiuscole che a quelle minuscole, mentre [^aeiou]
non corrisponde a
‘A’, mentre corrisponderebbe nel caso in cui la distinzione
maiuscole minuscole fosse considerata.
Il carattere newline non è mai trattato in qualche maniera speciale nelle
classi di caratteri, quale che sia l’impostazione delle opzioni (di modifica)
S
e M
. A una classe come [^a]
corrisponderà sempre un
carattere newline.
Il carattere meno (trattino) può essere usato per specificare un intervallo
di caratteri in una classe di caratteri. Per esempio, [d-m]
corrisponde
a qualsiasi lettera fra d ed emme, entrambe incluse. Se un carattere meno
deve far parte di una classe, dev’essere protetto con una barra inversa o
essere posto in una posizione in cui non possa essere interpretato come
indicazione di un intervallo, solitamente come il primo o l’ultimo carattere
nella classe di caratteri.
Non è possibile avere il carattere letterale ]
come ultimo carattere
di un intervallo. Un’espressione come [W-]46]
è interpretata come
una classe composta da due caratteri (W
e -
) seguiti da una
stringa letterale 46]
, ossia corrisponderebbe alle stringhe
‘W46]’ o ‘-46]’. Comunque, se il carattere ]
è protetto
con una barra inversa, è interpretato come fine dell’intervallo, quindi
[W-\]46]
è interpretato come una singola classe che contiene un
intervallo, seguito da due caratteri separati. La rappresentazione ottale
o esadecimale di ]
può anche essere usata per indicare la fine di
un intervallo.
Gli intervalli sono scritti secondo la sequenza di codifica ASCII.
Possono essere usati anche per specificare caratteri in forma
numerica, per esempio [\000-\037]
. Se un intervallo che comprende
delle lettere è usato dopo aver impostato una corrispondenza che prescinde
da maiuscolo/minuscolo, esso corrisponde alle lettere sia maiuscole che
minuscole. Per esempio un intervallo senza distinzione maiu/minu
[W-c]
equivale a [][\^_`wxyzabc]
, sempre senza distinzione
maiu/minu, e se si stanno usando delle tabelle per la localizzazione
francese l’intervallo [\xc8-\xcb]
corrisponde ai caratteri E
accentati sia maiuscoli che minuscoli.
A differenza della modalità POSIX, i tipi di carattere \d
,
\D
, \s
, \S
, \w
, e \W
possono anche far parte di una classe di caratteri e aggiungono i
caratteri che essi rappresentano alla classe. Per esempio [\dABCDEF]
corrisponde a qualsiasi cifra esadecimale. Un accento circonflesso può
essere convenientemente usato in associazione con l’assieme dei caratteri
maiuscoli per specificare un insieme di caratteri più ristretto rispetto
a quello dei caratteri non maiuscoli. Per esempio la classe [^\W_]
corrisponde a qualsiasi lettera o cifra, ma non al carattere trattino basso.
Tutti i caratteri non alfanumerici diversi da \
, -
,
^
(all’inizio) e la ]
finale sono non-speciali
nelle classi di caratteri, ma non guasta se vengono anche
protetti.
Perl 5.6 supporta la notazione POSIX per le classi di caratteri,
che usa nomi delimitati da [:
e :]
all’interno di parentesi
quadre e anche GNU sed
consente di usare questa notazione.
Per esempio,
[01[:alpha:]%]
corrisponde a ‘0’, ‘1’, qualsiasi carattere alfabetico, o ‘%’. I nomi di classe supportati sono
alnum
Corrisponde alle lettere e ai numeri
alpha
Corrisponde alle lettere
ascii
Corrisponde ai codici ascii 0 - 127
cntrl
Corrisponde ai caratteri di controllo
digit
Corrisponde alle cifre decimali (equivale a \d)
graph
Corrisponde ai caratteri stampabili, tranne lo spazio
lower
Corrisponde alle lettere minuscole
print
Corrisponde ai caratteri stampabili, compreso lo spazio
punct
Corrisponde ai caratteri stampabili, tranne i numeri e le lettere
space
Corrisponde a uno spazio bianco (equivale a \s)
upper
Corrisponde a lettere maiuscole
word
Corrisponde a caratteri che formano una parola “parola” (equivale a \w)
xdigit
Corrisponde a cifre esadecimali
Il nomi ascii
e word
sono estensioni valide solo in modalità
Perl. Un’altra estensione Perl è la negazione, che è
indicata da un accento circonflesso dopo i due punti. Per esempio,
[12[:^digit:]]
corrisponde a ‘1’, ‘2’, o qualsiasi cosa non sia una cifra.
Successivo: Impostazione opzioni, Precedente: Circonflesso/dollaro/punto, Su: regexp Perl [Contenuti][Indice]