C++ Academy · Aula

Pesquisa e substituição

Transforme textos com regex

Aula 3 de 413 etapas

Pesquisa e substituição é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

regex_replace

std::regex_replace retorna uma nova cadeia na qual cada correspondência de um padrão é substituída por uma cadeia de substituição.

  • A cadeia original não é alterada.
  • Por padrão, todas as correspondências são substituídas.
#include <iostream>
#include <regex>

int main() {
    std::regex p("cat");
    std::string s = "the cat and the cat";
    std::cout << std::regex_replace(s, p, "dog") << '\n';
    return 0;
}

Substituição de dígitos

Os padrões facilitam edições em massa, como mascarar cada dígito de uma cadeia com um marcador.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\d");
    std::string s = "PIN 1234";
    std::cout << std::regex_replace(s, p, "*") << '\n';
    return 0;
}

Referências retroativas na substituição

Use $1, $2 e assim por diante na cadeia de substituição para inserir grupos capturados, permitindo reorganizar o texto.

#include <iostream>
#include <regex>

int main() {
    std::regex p("(\\w+) (\\w+)");
    std::string s = "John Smith";
    std::cout << std::regex_replace(s, p, "$2 $1") << '\n';
    return 0;
}

A correspondência inteira: $&

O elemento $& representa a correspondência inteira e é útil para envolver o texto encontrado com caracteres adicionais.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\d+");
    std::string s = "item 42";
    std::cout << std::regex_replace(s, p, "[$&]") << '\n';
    return 0;
}

Substituição apenas da primeira ocorrência

Passe std::regex_constants::format_first_only para substituir apenas a primeira correspondência, em vez de todas as ocorrências.

#include <iostream>
#include <regex>

int main() {
    std::regex p("o");
    std::string s = "foo boo";
    auto out = std::regex_replace(s, p, "0", std::regex_constants::format_first_only);
    std::cout << out << '\n';
    return 0;
}

Normalização de espaços em branco

Uma tarefa comum de limpeza é reduzir sequências de espaços em branco a um único espaço.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\s+");
    std::string s = "too    many     spaces";
    std::cout << std::regex_replace(s, p, " ") << '\n';
    return 0;
}

Remoção de correspondências

Substituir por uma cadeia vazia efetivamente exclui todas as correspondências, o que é útil para remover caracteres indesejados.

#include <iostream>
#include <regex>

int main() {
    std::regex p("[^a-zA-Z]");
    std::string s = "a1b2c3";
    std::cout << std::regex_replace(s, p, "") << '\n';
    return 0;
}

Reformatação de datas

Capture partes de uma data e reorganize-as na substituição para alterar o formato.

#include <iostream>
#include <regex>

int main() {
    std::regex p("(\\d{4})-(\\d{2})-(\\d{2})");
    std::string s = "2026-05-30";
    std::cout << std::regex_replace(s, p, "$3/$2/$1") << '\n';
    return 0;
}

Manutenção do texto sem correspondência

Por padrão, o texto sem correspondência é copiado para a saída. Use format_no_copy para mostrar apenas as substituições e descartar o restante.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\d+");
    std::string s = "a1b2c3";
    auto out = std::regex_replace(s, p, "$&", std::regex_constants::format_no_copy);
    std::cout << out << '\n';
    return 0;
}

Censura de palavras

Combine alternância e substituição para censurar uma lista de palavras de uma só vez.

#include <iostream>
#include <regex>

int main() {
    std::regex p("bad|evil");
    std::string s = "a bad and evil idea";
    std::cout << std::regex_replace(s, p, "***") << '\n';
    return 0;
}

Construção de um resultado

Como regex_replace retorna uma cadeia, você pode encadear transformações passando um resultado para a chamada seguinte.

#include <iostream>
#include <regex>

int main() {
    std::string s = "  Hello,   World  ";
    s = std::regex_replace(s, std::regex("\\s+"), " ");
    s = std::regex_replace(s, std::regex("^ | $"), "");
    std::cout << "[" << s << "]\n";
    return 0;
}

Verificação rápida

Verifique sua compreensão da sintaxe de substituição.

Recapitulação

Você aprendeu a transformar texto com regex_replace:

  • substitui todas as correspondências por padrão e retorna uma nova cadeia
  • $1, $2 e $& inserem as capturas e a correspondência inteira
  • sinalizadores como format_first_only e format_no_copy
  • encadeie chamadas para criar limpezas complexas

Em seguida, você aprenderá a usar expressões regulares com eficiência e a evitar armadilhas comuns de desempenho.

Grátis para começar

Aprenda C++ com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
51
Aulas
203

Perguntas Frequentes

A aula “Pesquisa e substituição” é grátis?

Sim — o texto completo de “Pesquisa e substituição” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “Pesquisa e substituição”?

Transforme textos com regex Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C++ Academy?

Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Pesquisa e substituição”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C++ Academy?

Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Noções básicas de regex
  2. Grupos de captura
  3. Pesquisa e substituição
  4. Observações sobre desempenho
← Voltar para C++ Academy