PHP 8.5.0 Beta 2 available for testing

Configuración de opciones internas

La configuración de PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, PCRE_UNGREEDY, PCRE_EXTRA, PCRE_EXTENDED y PCRE_DUPNAMES puede cambiarse desde dentro del patrón mediante 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 soportado a partir de PHP 7.3.0)
J para PCRE_INFO_JCHANGED

Por ejemplo, (?im) establece coincidencia sin distinción de mayúsculas y minúsculas, multiline. También es posible anular estas opciones precediendo la letra con un guión, y una configuración combinada como (?im-sx), que establece PCRE_CASELESS y PCRE_MULTILINE mientras anula PCRE_DOTALL y PCRE_EXTENDED, también está permitido. Si una letra aparece tanto antes como después del guión, la opción se anula.

Cuando ocurre un cambio de opción a nivel superior (es decir, no dentro de paréntesis de subpatrón), el cambio se aplica al resto del patrón que sigue. Por lo tanto, /ab(?i)c/ coincide solo con "abc" y "abC".

Si un cambio de opción ocurre dentro de un subpatrón, el efecto es diferente. Este es un cambio de comportamiento en Perl 5.005. Un cambio de opción dentro de un subpatrón afecta solo a esa parte del subpatrón que sigue, por lo que (a(?i)b)c coincide con "abc" y "aBc" y ninguna otra cadena (asumiendo PCRE_CASELESS no se usa). De esta manera, las opciones pueden tener diferentes configuraciones en diferentes partes del patrón. Cualquier cambio realizado en una alternativa se lleva a las ramas posteriores dentro del mismo subpatrón. Por ejemplo, (a(?i)b|c) coincide con "ab", "aB", "c", y "C", incluso cuando se coincide con "C" la primera rama se abandona antes de la configuración de la opción. Esto se debe a que los efectos de la configuración de las opciones ocurren al tiempo de compilación. Habría un comportamiento muy extraño de otra manera.

Las opciones específicas de PCRE PCRE_UNGREEDY y PCRE_EXTRA pueden cambiarse de la misma manera que las opciones compatibles con Perl usando las letras U y X respectivamente. La configuración de la bandera (?X) es especial en que siempre debe ocurrir antes en el patrón que cualquiera de las características adicionales que activa, incluso cuando está a nivel superior. Es mejor ponerla al principio.

add a note

User Contributed Notes 2 notes

up
3
mike at clove dot com
15 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
16 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