W3docs

Expressões Regulares em PHP

Aprenda a usar expressões regulares em PHP para validar entradas, pesquisar texto, extrair dados e transformar strings com as funções preg_.

Uma expressão regular (regex) é um padrão que descreve um conjunto de strings. Em PHP, as expressões regulares permitem pesquisar texto, validar entradas, extrair dados e transformar strings com muito menos código do que a lógica manual caractere a caractere. Este capítulo aborda a sintaxe, as funções preg_ e as técnicas avançadas mais úteis, com exemplos executáveis para cada uma.

O Que São Expressões Regulares

Uma expressão regular é uma sequência de caracteres que define um padrão de busca. Em vez de corresponder a uma string fixa, um padrão pode descrever uma família inteira de strings — "qualquer dígito", "uma ou mais letras", "uma string com formato de e-mail", e assim por diante. Isso torna o regex ideal para:

  • Validar entradas do usuário (e-mails, números de telefone, CEPs).
  • Pesquisar substrings que seguem um formato em vez de um valor exato.
  • Extrair dados — retirando números de pedido, datas ou URLs de texto livre.
  • Substituir e dividir texto com base em um padrão.

PHP usa PCRE (Perl-Compatible Regular Expressions), portanto a sintaxe do padrão é a mesma do Perl, JavaScript e da maioria das outras linguagens modernas.

Como as Expressões Regulares Funcionam em PHP

Em PHP, as expressões regulares são tratadas pela família de funções preg_. Cada uma recebe um padrão como primeiro argumento e realiza uma operação diferente.

Funções preg_ comuns

FunçãoDescrição
preg_match()Pesquisa a primeira correspondência. Retorna 1 em caso de correspondência, 0 sem correspondência, false em caso de erro
preg_match_all()Encontra todas as correspondências. Retorna o número de correspondências completas encontradas
preg_replace()Substitui cada correspondência por uma string de substituição
preg_split()Divide uma string em um array usando o padrão como delimitador
preg_quote()Escapa caracteres que têm significado especial em um padrão

Um erro comum: preg_match() retorna 0 (falsy) para sem correspondência e false para um erro (como um padrão malformado). Use o operador === quando precisar distinguir esses dois casos.

Noções Básicas de Expressões Regulares em PHP

Um padrão PHP é uma string com o corpo do padrão envolvido em delimitadores (comumente /), opcionalmente seguidos de modificadores:

Sintaxe de expressão regular em PHP

/pattern/modifiers

Onde pattern é a sequência de caracteres a ser correspondida, e modifiers são letras opcionais que alteram o comportamento do padrão. Os modificadores mais usados em PHP são:

  • i: Correspondência sem distinção entre maiúsculas e minúsculas (/php/i corresponde a PHP, Php, php).
  • m: Modo multilinha — ^ e $ correspondem ao início/fim de cada linha, não apenas da string inteira.
  • s: Modo "dotall" — . também corresponde a caracteres de nova linha.
  • u: Trata o padrão e o sujeito como UTF-8. Use sempre que o texto puder conter caracteres não ASCII.

Blocos de construção de padrões comuns

Dentro do próprio padrão, alguns metacaracteres fazem a maior parte do trabalho:

TokenSignificado
\d \w \sUm dígito, um caractere de palavra, um caractere de espaço em branco
.Qualquer caractere único (exceto nova linha, a menos que s esteja definido)
+ * ?Um ou mais, zero ou mais, zero ou um do token anterior
{2,4}Entre 2 e 4 repetições
^ $Início e fim da string (ou linha no modo m)
[abc]Uma classe de caracteres — qualquer um de a, b ou c
(...)Um grupo de captura
|Alternância — corresponde ao padrão de qualquer um dos lados

Expressão regular PHP para substituir texto

php— editable, runs on the server

Usando Expressões Regulares PHP para Validar Entradas do Usuário

Um dos usos mais comuns de expressões regulares em PHP é validar entradas do usuário. Por exemplo, você pode usar uma expressão regular para garantir que um endereço de e-mail inserido pelo usuário esteja no formato correto. O código a seguir demonstra como isso pode ser feito:

Expressão regular PHP para garantir que um endereço de e-mail inserido pelo usuário esteja no formato correto

php— editable, runs on the server

Observação: Embora este regex funcione para validação básica, PHP fornece a função integrada filter_var($email, FILTER_VALIDATE_EMAIL) para validação de e-mail mais robusta e compatível com RFC. Para fluxos completos de formulário, consulte Validação de Formulários PHP.

Encontrando Todas as Correspondências

Enquanto preg_match() para na primeira correspondência, preg_match_all() coleta todas as correspondências em um array. Esta é a ferramenta para extrair dados repetidos, como cada palavra, número ou tag em uma string.

Extrair todos os números de uma string

<?php

$text = "Room 12, floor 3, building 7";
$count = preg_match_all("/\d+/", $text, $matches);

echo $count;                    // Outputs: 3
print_r($matches[0]);           // Outputs: Array ( [0] => 12 [1] => 3 [2] => 7 )

?>

Dividindo Strings

preg_split() divide uma string em um array usando um padrão como delimitador. Ao contrário do explode(), o delimitador pode variar — aqui dividimos em qualquer sequência de vírgulas e espaços em branco:

<?php

$csv = "apple, banana,  cherry";
$fruits = preg_split("/[\s,]+/", $csv);

print_r($fruits);
// Outputs: Array ( [0] => apple [1] => banana [2] => cherry )

?>

Técnicas Avançadas para Expressões Regulares PHP

Quando os conceitos básicos estiverem dominados, estas técnicas permitem escrever padrões expressivos e precisos.

Grupos de captura

Os parênteses (...) capturam parte de uma correspondência para que você possa lê-la de volta no array $matches. O índice 0 contém a correspondência completa; o índice 1 e acima contêm cada grupo.

php— editable, runs on the server

Grupos nomeados

(?<name>...) dá a um grupo um rótulo legível, para que você possa extrair valores por nome em vez de um índice numérico — muito mais claro para datas, preços e outros dados estruturados.

<?php

$date = "2023-10-01";
preg_match("/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/", $date, $m);

echo $m["year"];   // Outputs: 2023
echo $m["month"];  // Outputs: 10

?>

Alternância

O operador | corresponde a um padrão ou outro. O exemplo abaixo corresponde ao animal que aparecer primeiro:

<?php

preg_match("/cat|dog|bird/", "I love cats", $m);
echo $m[0]; // Outputs: cat

?>

Outros blocos de construção

  • Grupos não capturantes(?:...) agrupam tokens (por exemplo, para aplicar um quantificador) sem armazenar a correspondência, o que mantém o array $matches limpo.
  • Lookahead / lookbehind(?=...), (?!...), (?<=...), (?<!...) correspondem com base no que vem antes ou depois de uma posição sem consumi-la.
  • Quantificadores{n}, {n,} e {n,m} correspondem a uma contagem exata ou a um intervalo de repetições, por exemplo, \d{4} para exatamente quatro dígitos.

Quando você precisar corresponder a texto fornecido pelo usuário literalmente dentro de um padrão, passe-o por preg_quote() primeiro para que caracteres como . ou * sejam escapados em vez de tratados como metacaracteres.

Tópicos Relacionados

Conclusão

As expressões regulares PHP são uma ferramenta poderosa que pode ajudá-lo a realizar uma ampla gama de tarefas. Seja validando entradas do usuário, pesquisando texto ou realizando manipulações complexas de strings, as expressões regulares são uma parte essencial do conjunto de ferramentas do desenvolvedor PHP.

Prática

Prática
Quais são os usos das Expressões Regulares em PHP conforme indicado no artigo?
Quais são os usos das Expressões Regulares em PHP conforme indicado no artigo?
Was this page helpful?