Successivo: Ripetizione, Precedente: Impostazione opzioni, Su: regexp Perl [Contenuti][Indice]
Definire parte di un’espressione come una sotto-espressione implica due cose.
Da una parte, localizza un assieme di alternative; dall’altra
imposta la sotto-espressione come una sotto-espressione utilizzata (come
da definizione data più sopra). La sotto-espressione può essere oggetto di
riferimento all’indietro e utilizzata nella parte destra dei comandi s
.
Per esempio, se la stringa ‘qualche re rosso’ è esaminata usando l’espressione regolare
qualche ((re|regina) (rosso|bianco))
le sotto-stringhe che trovano corrispondenza sono ‘re rosso’, ‘rosso’, e ‘re’, e sono numerate 1, 2, e 3.
Il fatto che le parentesi tonde abbiano due funzioni non è sempre di aiuto.
Ci sono casi frequenti in cui serve una sotto-espressione che raggruppa
senza che ciò richieda una cattura. Se una parentesi aperta è seguita da
?:
, la sotto-espressione non fa alcuna cattura è non è contata quando
si calcolano alcune sotto-espressioni successive che catturano.
Per esempio, se la stringa ‘qualche regina bianca’ è esaminata usando
l’espressione regolare
qualche ((?:re|regina) (rossa|bianca))
le sotto-stringhe catturate sono ‘regina bianca’ e ‘regina’, e sono numerate 1 e 2. Il massimo numero di sotto-stringhe catturate è 99, mentre il numero massimo di tutte le sotto-espressioni, sia di cattura che non di cattura, è 200.
Come comoda abbreviazione, se un’opzione di impostazione è richiesta
all’inizio di una sotto-espressione non di cattura, le lettere dell’opzione
possono essere poste fra il ?
e il :
. Quindi le due espressioni
regolari
(?i:sabato|domenica) (?:(?i)sabato|domenica)
corrispondono esattamente allo stesso insieme di stringhe. Poiché i rami alternati vengono percorsi da sinistra a destra, e le opzioni non sono ricalcolate fino al raggiungimento della fine della sotto-espressione, l’impostazione di un’opzione in una dei rami ha effetto sui rami visitati dopo di esso, per cui le espressioni che appaiono qui sopra corrispondono sia a ‘DOMENICA’ che a ‘Sabato’.
Successivo: Ripetizione, Precedente: Impostazione opzioni, Su: regexp Perl [Contenuti][Indice]