When using the (?i:foo) syntax, it appears that the group is not included in the 'matches' argument unless it is nested in an additional set of parenthesis, for example: ((?i:foo))
Le opzioni PCRE_CASELESS, PCRE_MULTILINE , PCRE_DOTALL, PCRE_UNGREEDY e PCRE_EXTENDED possono essere cambiate "al volo" dall'interno del criterio di riconoscimento, utilizzando le sequenze di lettere definite per queste opzioni in Perl, racchiuse tra "(?" ed ")". Le lettere utilizzabili sono:
i |
per PCRE_CASELESS |
m |
per PCRE_MULTILINE |
s |
per PCRE_DOTALL |
x |
per PCRE_EXTENDED |
U |
per PCRE_UNGREEDY |
X |
per PCRE_EXTRA |
J |
per PCRE_INFO_JCHANGED |
Ad esempio, (?im) abilita il riconoscimento senza distinzione tra lettere maiuscole e minuscole e la modalità multi-linea. E' anche possibile disabilitare queste opzioni facendo precedere la lettera dal segno meno (-), o combinare l'attivazione con la disattivazione come nel caso (?im-sx), in cui si attiva PCRE_CASELESS e PCRE_MULTILINE e si disattiva PCRE_DOTALL e PCRE_EXTENDED. Se la lettera compare sia prima che dopo il segno meno (-) l'opzione resta disabilitata.
Quando il settaggio di un'opzione avviene al livello esterno (ovvero, fuori
dalle parentesi di un criterio parziale), esso si applica alla parte restante
del criterio. Quindi /ab(?i)c/
riconosce solo "abc"
e "abC".
Se si inserisce la variazione di un'opzione in una sotto-regola gli effetti
sono differenti. Questa è una variazione rispetto al comportamento di Perl 5.005.
Una variazione apportata all'interno di una sotto-regola, vale solo per la parte
della sotto-regola che segue la variazione, pertanto
(a(?i)b)c
identifica abc, aBc e nessuna altra stringa ( si assume che
PCRE_CASELESS non sia usato).
Da ciò deriva che le opzioni possono avere comportamenti differenti
nelle varie parti del criterio di riconoscimento. Ogni variazione
apportata ad una ramo alternativo del criterio viene estesa alle
alternative successive della medesima sotto-regola. Ad esempio,
(a(?i)b|c)
identifica "ab", "aB", "c" e "C", anche se per identificare "C"
viene scartato il primo ramo prima di incontrare il settaggio
dell'opzione. Questo accade perché gli effetti dei settaggi
vengono inseriti nella fase di compilazione. Diversamente si avrebbero dei comportamenti molto bizzarri.
Le opzioni specifiche di PCRE PCRE_UNGREEDY e PCRE_EXTRA possono essere variate nel medesimo modo delle opzioni Perl compatibili, utilizzando rispettivamente i caratteri U e X. Il flag (?X) è particolare poiché deve comparire prima di qualsiasi opzione esso attivi anche quando si trova al primo livello. E' opportuno inserirlo all'inizio.
When using the (?i:foo) syntax, it appears that the group is not included in the 'matches' argument unless it is nested in an additional set of parenthesis, for example: ((?i:foo))
There is also the possibility to enable Modifier only on a specific group, so that the Modifier doesn't stay valid until end or deactivation with "(?-<modifier>)".
The Syntax for that is "?<modifier>:" on the beginning of the group, i.e. (?i:foo) matches on FoO.