Ajuste de opciones internas
Los ajustes de PCRE_CASELESS,
PCRE_MULTILINE,
PCRE_DOTALL,
PCRE_UNGREEDY,
PCRE_EXTRA,
PCRE_EXTENDED
y PCRE_DUPNAMES se pueden cambiar desde dentro de un patrón por
una secuencia de letras de opciones de Perl encerradas entre "(?" y
")". Las letras de opciones son:
Por ejemplo, (?im) establece la coincidencia insensible a mayúsculas-minúsculas,
y multilínea. También es posible eliminar estas opciones precediendo la letra
con un guión, y un establecimiento y eliminación combinados como
(?im-sx), el cual establece PCRE_CASELESS y
PCRE_MULTILINE
mientras que elimina PCRE_DOTALL y
PCRE_EXTENDED,
también está permitido. Si una letra aparece tanto antes como después del
guión, la opción es eliminada.
Cuando un cambio de opción sucede en el nivel superior (es decir, fuera
de sub-patrones entre paréntesis), el cambio se aplica al resto del
patrón que sigue. Así, /ab(?i)c/
coincide sólo con "abc"
y "abC".
Si un cambio de opción sucede dentro de un sub-patrón, el efecto
es diferente. Esto es un cambio de comportamiento en Perl 5.005.
Un cambio de opción dentro de un sub-patrón afecta sólo a aquella parte
del sub-patrón que le sigue, por lo que
(a(?i)b)c
coincide con abc y aBc y ninguna otra cadena más (asumiendo que no se usa
PCRE_CASELESS).
Por medio de esto, las opciones pueden ser producidas para tener diferentes ajustes en
diferentes partes del patrón. Cualquier cambio hecho en un alternativa
continúa en ramas subsiguientes dentro del mismo sub-patrón. Por
ejemplo,
(a(?i)b|c)
coincide con "ab", "aB", "c", y "C", incluso cuando al coincidir con
"C" la primera rama es abandonada después de establecer la opción.
Esto es porque los efectos del establecimiento de opciones ocurren en
tiempo de compilación. De otro modo habría algunos comportamiento extraños.
Las opciones específicas de PCRE PCRE_UNGREEDY y
PCRE_EXTRA se pueden
cambiar de la misma forma que las opciones compatibles con Perl
usando los caracteres U y X respectivamente. La bandera
de ajuste (?X) es especial ya que debe producirse siempre antes
de que se active cualquier otra característica en el patrón,
incluso si está en el nivel superior. Lo mejor es ponerlo al principio.