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:

Letras de opciones internas
i para PCRE_CASELESS
m para PCRE_MULTILINE
s para PCRE_DOTALL
x para PCRE_EXTENDED
U para PCRE_UNGREEDY
X para PCRE_EXTRA (ya no es compatible en PHP 7.3.0)
J para PCRE_INFO_JCHANGED

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.

add a note add a note

User Contributed Notes 2 notes

up
3
mike at clove dot com
14 years ago
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))
up
2
mati_ at zenbe dot com
15 years ago
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.
To Top