Successivo: Sommario espressioni regolari, Precedente: Operatori di regexp GNU, Su: Espressioni regolari [Contenuti][Indice]
Il tipo di carattere (maiuscolo/minuscolo) è normalmente rilevante nelle espressioni regolari, sia nella ricerca di caratteri normali (cioè, non metacaratteri), sia all’interno di espressioni fra parentesi. Quindi, una ‘w’ in un’espressione regolare individua solo una ‘w’ e non la corrispondente maiuscola ‘W’.
Il modo più semplice per richiedere una ricerca non sensibile al maiuscolo/minuscolo è di usare un’espressione tra parentesi quadre, per esempio ‘[Ww]’. Comunque, questo può essere pesante se si usa spesso, e può rendere le espressioni regolari di difficile lettura. Ci sono due alternative che potrebbero essere preferibili.
Un modo per fare un confronto non sensibile a maiuscolo/minuscolo in un
particolare punto del programma
è di convertire i dati in un solo tipo (o minuscole o maiuscole),
usando le funzioni di stringa
predefinite tolower()
o toupper()
(che non
abbiamo ancora introdotto;
vedi Funzioni per stringhe).
Per esempio:
tolower($1) ~ /foo/ { … }
converte il primo campo in minuscole, prima di fare un confronto.
Questo funziona in ogni awk
conforme allo standard POSIX.
Un altro metodo, proprio di gawk
, è di impostare la variabile
IGNORECASE
a un valore diverso da zero (vedi Variabili predefinite).
Quando IGNORECASE
è diverso da zero, tutte le operazioni con
regexp e stringhe ignorano la distinzione maiuscolo/minuscolo.
Il cambio del valore di IGNORECASE
controlla dinamicamente la
sensibilità a maiuscolo/minuscolo del programma quando è in esecuzione.
Il tipo di carattere (maiuscolo/minuscolo) è rilevante per default,
poiché IGNORECASE
(come la maggior parte delle variabili) è
inizializzata a zero:
x = "aB" if (x ~ /ab/) … # questo test non risulterà verificato IGNORECASE = 1 if (x ~ /ab/) … # adesso sarà verificato
In generale, non è possibile usare IGNORECASE
per rendere certe regole
non sensibili a maiuscolo/minuscolo e altre regole invece sì, perché non c’è
una maniera diretta per impostare
IGNORECASE
solo per l’espressione di
una particolare regola.17
Per fare questo, si usino espressioni tra parentesi quadre oppure
tolower()
. Comunque, una cosa che si può fare con IGNORECASE
soltanto è di utilizzare o di ignorare la sensibilità a maiuscolo/minuscolo
per tutte le regole contemporaneamente.
IGNORECASE
è impostabile dalla riga di comando o in una regola
BEGIN
(vedi Altri argomenti; e
vedi Usare BEGIN/END).
Impostare IGNORECASE
dalla riga di comando è un modo per rendere
un programma insensibile a maiuscolo/minuscolo senza doverlo modificare.
In localizzazioni multibyte, le equivalenze tra caratteri maiuscoli e minuscoli sono controllate usando i valori in formato esteso dell’insieme di caratteri della localizzazione. Per il resto, i caratteri sono controllati usando l’insieme di caratteri ISO-8859-1 (ISO Latin-1). Questo insieme di caratteri è un’estensione del tradizionale insieme con 128 caratteri ASCII, che include anche molti caratteri adatti per le lingue europee.18
Il valore di IGNORECASE
non ha effetto se gawk
è in
modalità compatibile (vedi Opzioni).
Il tipo di carattere (maiuscolo o minuscolo) è sempre rilevante in modalità
compatibile.
Programmatori esperti in C e C++ noteranno che questo è possible, usando qualcosa come ‘IGNORECASE = 1 && /foObAr/ { … }’ e ‘IGNORECASE = 0 || /foobar/ { … }’. Comunque, questo è un po’ tortuoso e non è raccomandato.
Se questo sembra oscuro,
non c’è ragione di preoccuparsi; significa solo che gawk
fa
la cosa giusta.
Successivo: Sommario espressioni regolari, Precedente: Operatori di regexp GNU, Su: Espressioni regolari [Contenuti][Indice]