Expressões Regulares em PHP: da Teoria à Prática
\n\nExpressões regulares (regex ou regexp) são uma ferramenta poderosa para buscar, substituir e validar strings de acordo com um padrão definido. Em PHP, elas são implementadas através de um conjunto de funções PCRE (Perl Compatible Regular Expressions) e permitem resolver tarefas de qualquer complexidade: desde validação de email até parsing de código HTML. Neste artigo, vamos analisar a sintaxe, as principais funções e ver exemplos práticos que serão úteis para todo desenvolvedor PHP.
\n\n1. Fundamentos da Sintaxe de Expressões Regulares em PHP
\n\nQualquer expressão regular em PHP é delimitada por separadores (geralmente barras /). Após o separador de fechamento, podem ser especificados modificadores — flags que alteram o comportamento da busca.
$pattern = '/padrão/modificadores';\n\nMetacaracteres principais:
\n- \n
.— qualquer caractere único (exceto quebra de linha) \n *— zero ou mais repetições do caractere anterior \n +— uma ou mais repetições \n ?— zero ou uma repetição (torna o quantificador preguiçoso) \n ^— início da string \n $— final da string \n \\d— dígito (0-9) \n \\w— letra, dígito ou sublinhado \n \\s— caractere de espaço em branco \n []— classe de caracteres (exemplo:[a-z]) \n ()— grupo de captura \n
Modificadores populares:
\n- \n
i— busca sem distinção entre maiúsculas e minúsculas \n m— modo multilinha (^ e $ funcionam para cada linha) \n u— suporte a UTF-8 (obrigatório para caracteres cirílicos) \n s— o ponto também captura quebras de linha \n
2. Função preg_match(): Busca de Correspondências
\n\npreg_match() é a função mais popular. Ela verifica se a string corresponde ao padrão e retorna 1 (se houver correspondência) ou 0 (se não houver). O terceiro parâmetro é um array onde as correspondências encontradas são armazenadas.
Exemplo 1. Validação de endereço de email
\n<?php\n$email = "user@example.com";\n$pattern = '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/';\n\nif (preg_match($pattern, $email)) {\n echo "Email válido";\n} else {\n echo "Email inválido";\n}\n// Saída: Email válido\n?>\n\nExemplo 2. Extração de dados de uma string
\n<?php\n$text = "Meu número: +7 (999) 123-45-67";\n$pattern = '/\\+7\\s*\\(\\d{3}\\)\\s*\\d{3}-\\d{2}-\\d{2}/u';\n\nif (preg_match($pattern, $text, $matches)) {\n echo "Número encontrado: " . $matches[0];\n}\n// Saída: Número encontrado: +7 (999) 123-45-67\n?>\n\nObserve: o modificador u é obrigatório se a string contiver caracteres cirílicos ou caracteres especiais Unicode.
3. Função preg_replace(): Substituição por Padrão
\n\npreg_replace() busca na string todas as correspondências com o padrão e as substitui pelo texto especificado. É possível usar grupos de captura $1, $2, etc., para inserir partes do texto original.
Exemplo 3. Formatação de número de telefone
\n<?php\n$phone = "89991234567";\n$pattern = '/(\\d{1})(\\d{3})(\\d{3})(\\d{2})(\\d{2})/';\n$replacement = '+7 ($2) $3-$4-$5';\n\n$formatted = preg_replace($pattern, $replacement, $phone);\necho $formatted; // +7 (999) 123-45-67\n?>\n\nExemplo 4. Limpeza de HTML removendo tags (exceto as permitidas)
\n<?php\n$html = "<b>Negrito</b> <script>alert('xss')</script> texto";\n$pattern = '/<\\s*\\/?\\s*(?!b|i|u|a\\b)[^>]*>/ui';\n\n$clean = preg_replace($pattern, '', $html);\necho $clean; // <b>Negrito</b> texto\n?><