Expressões regulares em C++: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Expressões Regulares em C++: Uma Ferramenta Poderosa para Trabalhar com Strings

Expressões regulares (regex) são uma linguagem formal para busca e manipulação de substrings em texto baseada em padrões. Em C++, o suporte para expressões regulares foi introduzido no padrão C++11 e é implementado na biblioteca <regex>. É uma ferramenta indispensável para validação de dados, parsing de logs, busca de padrões e substituição de texto.

Neste artigo, vamos analisar as principais funções da biblioteca regex, aprender a criar padrões e examinar exemplos práticos com código.



1. Principais Tipos e Funções da Biblioteca <regex>

Para trabalhar com expressões regulares em C++, são usadas três classes principais:

  • std::regex — representa a própria expressão regular (padrão).
  • std::smatch — contêiner para armazenar resultados de busca (para strings do tipo std::string).
  • std::cmatch — análogo para C-strings (const char*).

Funções-chave para aplicar regex:

  • std::regex_match() — verifica se toda a string corresponde ao padrão.
  • std::regex_search() — busca a primeira correspondência com o padrão na string.
  • std::regex_replace() — substitui todas as correspondências pelo texto especificado.


#include <iostream>#include <regex>#include <string>

int main() { std::string text = "Meu número: +7-123-456-78-90"; std::regex pattern(R"(\\+7-\\d{3}-\\d{3}-\\d{2}-\\d{2})");

if (std::regex_search(text, pattern)) { std::cout << "Número encontrado!" << std::endl; }

// Extraindo a correspondência std::smatch match; if (std::regex_search(text, match, pattern)) { std::cout << "Número encontrado: " << match[0] << std::endl; }

return 0;}


2. Sintaxe das Expressões Regulares: Metacaracteres e Quantificadores

Os padrões regex em C++ usam uma sintaxe semelhante ao ECMAScript (padrão). Aqui estão os elementos principais:

  • Ponto (.) — qualquer caractere único, exceto quebra de linha.
  • Asterisco (*) — 0 ou mais repetições do caractere anterior.
  • Mais (+) — 1 ou mais repetições.
  • Ponto de interrogação (?) — 0 ou 1 repetição (torna o caractere opcional).
  • Colchetes ([]) — classe de caracteres (exemplo: [0-9] — qualquer dígito).
  • Parênteses (()) — agrupamento e captura de substring.
  • Barra vertical (|) — OU lógico.
  • Símbolo ^ — início da string.
  • Símbolo $ — fim da string.

Exemplos de quantificadores:

  • \\d{3} — exatamente 3 dígitos.
  • \\w{2,4} — de 2 a 4 caracteres alfanuméricos.
  • [A-Za-z]+ — uma ou mais letras latinas.


#include <iostream>#include <regex>#include <string>

int main() { std::string email = "user@example.com"; // Padrão simples para email std::regex email_pattern(R"([\\w.+-]+@[\\w-]+\\.[\\w.]+)");

if (std::regex_match(email, email_pattern)) { std::cout << "Email válido." << std::endl; } else { std::cout << "Email inválido." << std::endl; }

// Verificação de número de telefone std::string phone = "+7 (495) 123-45-67"; std::regex phone_pattern(R"(\\+7\\s?\\(?\\d{3}\\)?\\s?\\d{3}-?\\d{2}-?\\d{2})");

if (std::regex_match(phone, phone_pattern)) { std::cout << "Telefone válido." << std::endl; }

return 0;}


3. Extração de Dados Usando Grupos de Captura

Grupos de captura

Blogs

Book Recommendations