| Options internes
Les options PCRE_CASELESS ,
PCRE_MULTILINE ,
PCRE_DOTALL ,
PCRE_UNGREEDY ,
PCRE_EXTRA et
PCRE_EXTENDED peuvent
être changées à l'intérieur du masque
lui-même, avec des séquences mises entre
"
(?
" et "
)
".
Les options sont :
Par exemple,
(?im)
rend le masque insensible à
la casse, et multi-lignes. Il est possible d'annuler ces options en les
faisant précéder par un signe
-
: par
exemple
(?im-sx)
, ajoutera les options
PCRE_CASELESS
et PCRE_MULTILINE mais
annulera les options
PCRE_DOTALL
et PCRE_EXTENDED .
Si une option apparaît avant et après le signe moins, l'option
sera annulée.
Lorsqu'une modification d'option survient au degrès le plus haut (et donc, pas dans
les parenthèses du sous-masque), les modifications sont appliquées dans le reste
du masque qui suit. Donc,
/ab(?i)c/
valide uniquement
"abc" et "abC". Ce comportement a été modifié en PCRE 4.0 et est inclus depuis
PHP 4.3.3. Dans les versions précédentes,
/ab(?i)c/
fonctionne
de la même façon que
/abc/i
(e.g. valide "ABC" et "aBc").
Si une option intervient dans un sous-masque, le comportement est différent.
C'est un changement de comportement apparu en Perl 5.005. Une option à
l'intérieur d'un sous-masque n'affecte que cette partie du masque, ce
qui fait que
(a(?i)b)c
acceptera
abc
et
aBc
mais aucune autre chaîne (en supposant que PCRE_CASELESS n'est pas
utilisé). Cela signifie que les options permettent d'avoir
différentes configurations de recherche pour différentes
parties du masque.
Une séquence d'options dans une alternative affecte toute
l'alternative. Par exemple :
(a(?i)b|c)
accepte "
ab
", "
aB
", "
c
",
et "
C
", même si, comme dans le cas de
"
C
", la première alternative qui porte
l'option n'est pas prise en compte. Sinon, cela risque d'introduire
des comportements très étranges : les options
spécifiques à PCRE telles
PCRE_UNGREEDY et
PCRE_EXTRA peuvent
être modifiées de la même
manière, en utilisant respectivement les caractères
U et X. L'option
(?X)
est particulière,
car elle doit toujours intervenir avant toutes les autres options,
même au niveau du masque entier. Il vaut mieux l'activer au
début du masque.
|