Successivo: Sotto-espressioni non utilizzate, Precedente: Parentesi quadre, Su: regexp Perl [Contenuti][Indice]
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: Sotto-espressioni non utilizzate, Precedente: Parentesi quadre, Su: regexp Perl [Contenuti][Indice]