Successivo: , Precedente: , Su: regexp Perl   [Contenuti][Indice]


B.3 Parentesi quadre

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: , Precedente: , Su: regexp Perl   [Contenuti][Indice]