Noções básicas de regex
Faça correspondência de padrões em textos
Noções básicas de regex é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 1 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.
O que é <regex>?
O cabeçalho <regex> permite comparar texto com padrões de expressões regulares que descrevem conjuntos de cadeias de caracteres. Você cria um padrão e depois testa ou pesquisa o texto com ele.
std::regexarmazena um padrão compilado.- As funções de correspondência informam se o texto se encaixa no padrão.
#include <iostream>
#include <regex>
int main() {
std::regex pattern("hello");
std::cout << std::boolalpha << std::regex_match("hello", pattern) << '\n';
return 0;
}regex_match versus regex_search
regex_match exige que a cadeia inteira corresponda ao padrão. regex_search tem sucesso se o padrão aparecer em qualquer posição da cadeia.
#include <iostream>
#include <regex>
int main() {
std::regex p("cat");
std::string s = "the cat sat";
std::cout << std::boolalpha;
std::cout << "match: " << std::regex_match(s, p) << '\n';
std::cout << "search: " << std::regex_search(s, p) << '\n';
return 0;
}Classes de caracteres
Colchetes definem um conjunto de caracteres permitidos. [aeiou] corresponde a qualquer vogal individual; intervalos como [a-z] correspondem a letras minúsculas.
#include <iostream>
#include <regex>
int main() {
std::regex p("[a-z]+");
std::cout << std::boolalpha << std::regex_match("hello", p) << '\n';
std::cout << std::regex_match("Hello", p) << '\n';
return 0;
}Quantificadores
Os quantificadores controlam a repetição: * significa zero ou mais ocorrências, + uma ou mais, ? opcional e {n,m} um intervalo de contagem.
#include <iostream>
#include <regex>
int main() {
std::regex p("a+b");
std::cout << std::boolalpha;
std::cout << std::regex_match("aaab", p) << '\n';
std::cout << std::regex_match("b", p) << '\n';
return 0;
}Classes predefinidas
Classes abreviadas evitam digitação: \\d corresponde a um dígito, \\w a um caractere de palavra e \\s a um espaço em branco. No código-fonte C++, a barra invertida é duplicada.
#include <iostream>
#include <regex>
int main() {
std::regex p("\\d+");
std::cout << std::boolalpha;
std::cout << std::regex_match("12345", p) << '\n';
std::cout << std::regex_match("12a45", p) << '\n';
return 0;
}Âncoras
Âncoras fixam uma correspondência a uma posição: ^ marca o início e $ o fim do texto. Elas correspondem a posições, não a caracteres.
#include <iostream>
#include <regex>
int main() {
std::regex p("^abc$");
std::cout << std::boolalpha;
std::cout << std::regex_search("abc", p) << '\n';
std::cout << std::regex_search("xabc", p) << '\n';
return 0;
}Alternância
O caractere de barra vertical | significa “ou”. O padrão cat|dog corresponde a qualquer uma das duas palavras. Use parênteses para limitar o escopo.
#include <iostream>
#include <regex>
int main() {
std::regex p("cat|dog");
std::cout << std::boolalpha;
std::cout << std::regex_match("cat", p) << '\n';
std::cout << std::regex_match("dog", p) << '\n';
std::cout << std::regex_match("fish", p) << '\n';
return 0;
}Escape de caracteres especiais
Caracteres como ., * e ( têm um significado especial. Use uma barra invertida para fazer o escape deles e corresponder literalmente a esses caracteres.
#include <iostream>
#include <regex>
int main() {
std::regex p("3\\.14");
std::cout << std::boolalpha;
std::cout << std::regex_match("3.14", p) << '\n';
std::cout << std::regex_match("3x14", p) << '\n';
return 0;
}Correspondência sem distinção entre maiúsculas e minúsculas
Passe um sinalizador como std::regex::icase ao construir o padrão para ignorar a distinção entre maiúsculas e minúsculas durante a correspondência.
#include <iostream>
#include <regex>
int main() {
std::regex p("hello", std::regex::icase);
std::cout << std::boolalpha;
std::cout << std::regex_match("HELLO", p) << '\n';
std::cout << std::regex_match("Hello", p) << '\n';
return 0;
}Uma validação simples
Os padrões são excelentes para validar formatos de entrada, como verificar se uma cadeia se parece com um número básico com sinal opcional.
#include <iostream>
#include <regex>
bool isNumber(const std::string& s) {
static const std::regex p("-?\\d+");
return std::regex_match(s, p);
}
int main() {
std::cout << std::boolalpha;
std::cout << isNumber("-42") << '\n';
std::cout << isNumber("4a2") << '\n';
return 0;
}Correspondência de várias ocorrências
Combine classes e quantificadores para validar formatos mais elaborados, como uma sequência de letras seguida de dígitos.
#include <iostream>
#include <regex>
int main() {
std::regex p("[A-Za-z]+\\d+");
std::cout << std::boolalpha;
std::cout << std::regex_match("abc123", p) << '\n';
std::cout << std::regex_match("123abc", p) << '\n';
return 0;
}Verificação rápida
Verifique sua compreensão da diferença entre correspondência e pesquisa.
Recapitulação
Você aprendeu os fundamentos de <regex>:
regex_matchpara a cadeia inteira eregex_searchpara correspondências de partes da cadeia- classes de caracteres, quantificadores, âncoras e alternância
- classes predefinidas, como
\\d, e escape de caracteres especiais - sinalizadores como
icase
Em seguida, você extrairá partes específicas de uma correspondência usando grupos de captura.
Perguntas Frequentes
A aula “Noções básicas de regex” é grátis?
Sim — o texto completo de “Noções básicas de regex” é 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 “Noções básicas de regex”?
Faça correspondência de padrões em textos 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 1 de 4.
Quanto tempo leva a aula “Noções básicas de regex”?
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
- Noções básicas de regex
- Grupos de captura
- Pesquisa e substituição
- Observações sobre desempenho