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 la sezione Funzioni di manipolazione di 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 la sezione 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.18
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 la sezione Altri argomenti della riga di comando; e
vedi la sezione Azioni di inizializzazione e pulizia).
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. Prima della versione 5.0, i caratteri che usano un solo byte erano confrontati usando l’insieme di caratteri ISO-8859-1 (ISO Latin-1). Tuttavia, a partire dalla versione 5.0, i caratteri che usano un solo byte sono confrontati usando anche i valori dell’insieme di caratteri della localizzazione.19
Il valore di IGNORECASE
non ha effetto se gawk
è in
modalità compatibile (vedi la sezione Opzioni sulla riga di comando).
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]