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


B.4 Impostazione opzioni

Le impostazioni dei modificatori I, M, S, X possono essere cambiate all’interno dell’espressione regolare da una sequenza di lettere di opzione Perl racchiuse tra (? e ). Le lettere di opzione devono essere minuscole.

Per esempio, (?im) imposta indifferente a maiuscolo/minuscolo, multiriga. È anche possibile annullare queste opzioni premettendo un trattino alla lettera; è possibile anche avere sia impostazioni che annullamenti: (?im-sx) richiede una corrispondenza indifferente a maiuscolo/minuscolo e multiriga, mentre non vuole corrispondenza su una riga singola (per i punti) e un’interpretazione estesa degli spazi. Se una lettera appare sia prima che dopo il trattino, l’opzione è annullata.

Il campo di applicazione di queste modifiche di opzioni dipende da dove sono situate le impostazioni nell’espressione. Per impostazioni che sono al di fuori di ogni sotto-espressione regolare (definite più sotto), l’effetto è lo stesso che si avrebbe se le impostazioni fossero state poste all’inizio della corrispondenza. Le seguenti espressioni regolari sono tutte equivalenti:

(?i)abc
a(?i)bc
ab(?i)c
abc(?i)

Il che, a sua volta, equivale a specificare l’espressione abc con il modificatore I. In altre parole, impostazioni “all’inizio” valgono per l’intera espressione regolare (a meno che non ci siano altre modifiche all’interno delle sue sotto-espressioni). Se c’è più di una impostazione della stessa opzione al livello più alto, si usa l’impostazione più a destra.

Se un cambio in un’opzione avviene all’interno di una sotto-espressione, l’effetto è differente. Questo è un cambio di comportamento a partire da Perl 5.005. Un cambio in un’opzione all’interno di una sotto-espressione vale solo all’interno della sotto-espressione successiva, quindi

(a(?i)b)c

corrisponde alle stringhe ‘abc’ e ‘aBc’ e a nessuna altra stringa (nel caso in cui si stia usando la corrispondenza che considera maiuscole/minuscole). In questo modo, le opzioni possono avere differenti impostazioni in differenti ramificazioni dell’espressione. Ogni modifica effettuata in una delle varie alternative vale per le successive parti della stessa sotto-espressione. Per esempio,

(a(?i)b|c)

corrisponde alle stringhe ‘ab’, ‘aB’, ‘c’, e ‘C’, anche se quando si trova la corrispondenza ‘C’ la prima ramificazione è abbandonata prima di impostare l’opzione. Questo è perché gli effetti dell’impostazione di opzioni si hanno nel momento in cui l’espressione è compilata. Altrimenti si riscontrerebbero dei comportamenti molto strani.


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