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


B.5 Sotto-espressioni non utilizzate

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