Olá pessoal!
Para quem deseja aprender sobre os modificadores PCRE, e não consegue entender nada do manual.
Foi feita uma tradução, que visa auxiliar o estudo sobre o assunto.
Bem, espero que gostem!
i (PCRE_CASELESS)
Se esse modificador é usado, as letras maiúsculas e minúsculas são tratadas igualmente. (case insensitivo)
<?php
$string = 'php';
// Casando a string 'php'
// Saída:
// Array ( [0] => php )
?>
m (PCRE_MULTILINE)
Por padrão, PCRE trata a string fornecida como única linha de caracteres. (Mesmo que tenha diversos newlines)
O "começo da linha" (^) combina somente no início da string, quando a "extremidade o da linha" ($) combina somente na extremidade da string, ou antes de um newline terminado (a menos que o modificador de D é ajustado).
Este é o mesmo que o Perl.
Quando este modificador é usado, o "começo da linha" e da "extremidade de linha" combina imediatamente antes de todo o newline na string fornecida.
Isto é equivalente aos modificadores Perl de m. Se não houver nenhum caracter de "\n" em uma string sujeita, ou nenhumas ocorrências de ^ ou $ em um teste padrão, ajustar este modificador não tem nenhum efeito.
<?php
$string = 'Testando o modificador m
Testando o modificador m';
// Casando com cada linha
preg_match('/^\s*([\w ]+)\s?$/m',
$string,
$matches);
// Saída:
// Array ( [0] => Testando o modificador m [1] => Testando o modificador m )
?>
s (PCRE_DOTALL)
Se este modificador for usado, um meta caracter do ponto no teste padrão combina todos os caracteres, inclusive newlines. Sem ele, os newlines são excluídos. Este modificador é equivalente aos modificadores Perl de s.
Uma classe negativa como [^a] combina sempre com caracter do newline, independente do ajuste deste modificador.
<?php
$string = '[teste]
Nova linha!
[/teste]';
// Obtendo o conteúdo, incluse as newlines entre [teste] e [/teste]
// Saída:
// Array ( [0] => Array ( [0] => [teste] Nova linha! [/teste] ) [1] => Array ( [0] => Nova linha! ) )
?>
x (PCRE_EXTENDED)
Se este modificador for usado, os caracteres de espaço (whitespace) no pattern serão ignorados totalmente a não ser que esteja escapado ou no interior de uma classe de caracteres, e os carateres entre unescaped # fora de uma classe de caracter e do caracter seguinte do newline, inclusive, são também ignorados.
Isto é equivalente ao modificador Perl de x, que faz possível incluir comentários dentro de um teste padrão.
Entretanto, aplica-se somente aos caracteres de dados. Os caracteres de espaço (whitespace) podem nunca aparecer dentro das seqüências de caracter especial em um pattern padrão, por exemplo dentro da seqüência (? (que introduz um condicional subpattern.
<?php
$string = 'teste';
// Funciona, pois os whitespaces serão ignorados
// Saída:
// Array ( [0] => teste )
?>
<?php
$string = '1foo';
// Emitirá um erro, pois o whitespace no caso não é ignorado
// Saída:
// Warning: Compilation failed: unrecognized character after (? at offset 2
?>
e
Se este modificador for usado, o preg_replace() fará a substituição normal dos retrovisores (backreferences) na string fornecida, e usará o resultado substituindo a string da busca. As aspas e apóstrofos são escapadas por barra invertida (backslashes) nos retrovisores (backreferences) substituídos.
Somente preg_replace() utiliza este modificador; Ele é ignorado por outra funções PCRE.
<?php
$string = 'php';
// Obtendo a string fornecida e transformando as letras em maiúsculas
// Saída:
// PHP
?>
A (PCRE_ANCHORED)
Se este modificador for usado, o teste padrão forçará "para ser escorado", isto é, é confinado para combinar somente no início da string que está sendo procurarada ("a string sujeita").
Este efeito pode também ser conseguido pelas construções apropriadas no teste padrão, que é a única maneira a fazer no Perl.
<?php
$string = ' php';
// Não casa, pois o caracter inicial é um whitespace
// Saída:
// Array ( )
?>
D (PCRE_DOLLAR_ENDONLY)
Se este modificador for usado, um meta caracter do dólar ($) no teste padrão combinará somente com a extremidade da string sujeita.
Sem este modificador, um dólar combina também com um newline (mas não antes de outros newlines).
Este modificador é ignorado se o modificador de m for usado. Não há nenhum equivalente a este modificador no Perl.
<?php
$string = "Teste\n";
// Não casa, pois no final da string há um caracter de newline
// Saída:
// Array ( [0] => Array ( ) )
?>
S
Quando um teste padrão será usado diversas vezes, vale a pena gastar mais tempo analisando em favor da velocidade a fim apressar a combinação.
Se este modificador for usado, esta análise extra será executada. Atualmente, estudar um teste padrão é útil somente para os testes padrões não escorados, que não têm um único caracter inicial fixo.
U (PCRE_UNGREEDY)
Este modificador inverte a "gulosidade" dos quantificadores de modo que não sejam gulosos por padrão, mas torna-se guloso se seguido por "?". Não é compatível com Perl.
Pode também ser usado por um (?U) que ajusta-se dentro do teste padrão ou por uma interrogação depois de um quantificador (por exemplo. *?).
<?php
$string = 'Teste';
// O '?' tornou guloso o quantificador '+'
// Saída:
// Array ( [0] => Array ( [0] => Teste ) )
?>
X (PCRE_EXTRA)
Este modificador aciona uma funcionalidade adicional do PCRE que é compatível com Perl. Qualquer barra invertida (backslash) na busca que é seguida por uma letra que não tenha nenhum significado especial causa um erro, reservando assim essas combinações para futuros upgrades.
Até agora ná há outra funcionalidade controlada por este modificador.
<?php
$string = 'i';
// Emitirá um erro, pois \i não é reconhecido
// Saída:
// Warning: Compilation failed: unrecognized character follows \ at offset 1
?>
u (PCRE_UTF8)
Este modificador aciona uma funcionalidade adicional de PCRE que é incompatível com Perl. As strings do teste padrão são tratadas como UTF-8. Este modificador está disponível no PHP 4.1.0 ou superior em Unix e no PHP 4.2.3 em WIN32.
<?php
$string = 'á'; // á em UTF-8
// O teste é tratado como UTF-8
// Saída:
// Array ( [0] => á )
?>
Fonte
http://br2.php.net/manual/pt_BR/reference.pcre.pattern.modifiers.php
Créditos (tradução)
Diego Sampaio (chinello [em] gmail.com)
Felipe Nascimento (felipensp [em] gmail.com)
Paulo Ricardo (v1d4l0k4 [em]gmail.com)
Pedro Faria (pedro [em] phpavancado.net)