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))
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:
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.
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.