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))As configuraçÔes de PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, PCRE_UNGREEDY, PCRE_EXTRA, PCRE_EXTENDED e PCRE_DUPNAMES podem ser alteradas de dentro da expressĂŁo atravĂ©s de uma sequĂȘncia de letras de opção do Perl envolvidas entre "(?" e ")". As letras de opçÔes sĂŁo:
i |
para PCRE_CASELESS |
m |
para PCRE_MULTILINE |
s |
para PCRE_DOTALL |
x |
para PCRE_EXTENDED |
U |
para PCRE_UNGREEDY |
X |
para PCRE_EXTRA (nĂŁo mais suportada a partir do PHP 7.3.0) |
J |
para PCRE_INFO_JCHANGED |
Por exemplo, (?im) define uma correspondĂȘncia insensĂvel a maiĂșsculas/minĂșsculas, com multi-linhas. TambĂ©m Ă© possĂvel remover estas opçÔes precendendo a letra com um hĂfen, e combinar definição com remoção como em (?im-sx), que define PCRE_CASELESS e PCRE_MULTILINE enquanto remove PCRE_DOTALL e PCRE_EXTENDED. Se uma letra aparecer tanto antes quanto depois do hĂfen, a opção Ă© removida.
Quando uma mudança de opção ocorre no nĂvel mais alto (isto Ă©, nĂŁo ocorre dentro
de parĂȘnteses de sub-expressĂŁo), a mudança se aplica ao restante da
expressĂŁo que se segue. Assim, /ab(?i)c/ corresponde apenas a "abc"
e "abC".
Se uma mudança de opção ocorre dentro de uma sub-expressão, o efeito
é diferente. Isto é uma mudança de comportamento no Perl 5.005.
Uma mudança de opção dentro de uma sub-expressão afeta somente aquela parte
da sub-expressĂŁo que a segue, assim
(a(?i)b)c
corresponde a "abc" e "aBc" e nenhuma outra string (assumindo que PCRE_CASELESS nĂŁo seja
usada). Por este meio, opçÔes podem ser usadas para ter configuraçÔes diferentes em
partes diferentes da sub-expressão. Qualquer mudança feita em uma alternativa
Ă© carregada nos ramos subsequentes dentro da mesma sub-expressĂŁo. Por
exemplo,
(a(?i)b|c)
corresponde a "ab", "aB", "c" e "C", embora quando corresponde a
"C", o primeiro ramo é abandonado antes da definição da opção.
Isto porque os efeitos de configuraçÔes de opçÔes acontecem em
tempo de compilação. Haveria comportamento muito estranho caso não fosse desta maneira.
As opçÔes especĂficas do PCRE PCRE_UNGREEDY e PCRE_EXTRA podem ser alteradas da mesma forma que as compatĂveis com o Perl, usando os caracteres U e X respectivamente. A opção (?X) Ă© especial pelo fato de que deve sempre ocorrer na expressĂŁo antes de qualquer recurso adicional que ela ativa, mesmo quando estĂĄ no nĂvel mais alto. Ă melhor quando colocada no inĂcio.
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.