Table of Contents
Curso de Expressões Regulares (Regex) 🔍
Domine a arte de encontrar padrões em textos com precisão cirúrgica. Aprenda a ferramenta mais poderosa para processamento de dados, validação e automação.
O que você vai dominar
Foco: Entenda a lógica por trás dos metacaracteres e como aplicá-los em qualquer linguagem de programação ou ferramenta moderna.
🎯 Por que aprender Regex?
-
Velocidade Épica
Processe gigabytes de logs ou milhares de linhas de código em segundos.
-
Validação Robusta
Garanta que e-mails, senhas e documentos sigam o formato correto sem falhas.
-
Limpeza e Extração
Transforme dados bagunçados em informações estruturadas automaticamente.
-
Independência de Linguagem
Aprenda uma vez e use em Python, JS, Java, PHP e ferramentas como VS Code.
📚 Estrutura do Curso (16 Aulas)
O curso é dividido em dois módulos estratégicos para levar você do zero ao nível avançado.
Módulo 1: A Lógica do Padrão (Aulas 01-08)
Construa sua base sólida com os fundamentos do Regex. * Aula 01 - Introdução e Conceitos 🧠 * Aula 02 - Estrutura Básica 🏗️ * Aula 03 - Metacaracteres Fundamentais 🔣 * Aula 04 - Conjuntos e Intervalos 📦 * Aula 05 - Quantificadores 🔢 * Aula 06 - Âncoras e Limites ⚓ * Aula 07 - Agrupamentos e Captura 🎯 * Aula 08 - Alternância (Or) 🔀
Módulo 2: Domínio e Aplicações (Aulas 09-16)
Aplique seu conhecimento em cenários reais e linguagens modernas. * Aula 09 - Modificadores (Flags) 🚩 * Aula 10 - Regex no Front-end (JS) 📜 * Aula 11 - Regex no Back-end (Python) 🐍 * Aula 12 - Validações de Campo ✅ * Aula 13 - Extração de Dados em Massa ⛏️ * Aula 14 - Transformação de Texto 🧹 * Aula 15 - Performance e Segredos 🚀 * Aula 16 - Projeto Final: Data Cleaner 🎓
Success
Pronto para o próximo nível? Clique no botão abaixo e descubra o poder do Regex!
Sobre o Curso
🎓 Expressões Regulares (Regex)
Este é um curso completo e estruturado de Expressões Regulares (Regex). Desenvolvido para levar você do básico ao avançado, com uma abordagem prática e focada nas necessidades reais do mercado de tecnologia, desde validação de dados até automação de tarefas.
🎯 Objetivos do Curso
-
Dominar Metacaracteres
Aprender os blocos fundamentais para construir qualquer expressão de busca.
-
Validação de Dados
Criar regras robustas para validar e-mails, telefones, CPFs e senhas fortes.
-
Integração Multinível
Aplicar Regex em JavaScript, Python e ferramentas de linha de comando.
-
Automação e Limpeza
Extrair e transformar grandes volumes de texto de forma automatizada e eficiente.
📚 O Que Você Vai Aprender
Módulo 1 – Fundamentos e Sintaxe
- O que são Expressões Regulares
- Metacaracteres fundamentais e conjuntos
- Quantificadores e Âncoras
- Agrupamentos, Captura e Alternância
Módulo 2 – Aplicações Práticas
- Regex em JavaScript (test, match, replace)
- Regex em Python (biblioteca re)
- Validação de formulários reais
- Extração de dados e limpeza de textos
🛠️ Metodologia
-
Aulas Teóricas
Conteúdo explicativo com exemplos práticos e slides interativos com Reveal.js.
-
Exercícios Progressivos
Listas de 5 exercícios por aula para fixar desde o básico até o desafio final.
-
Mini-Projetos
Desenvolva soluções práticas de Regex em cada aula do curso.
-
Quizzes Interativos
Teste seus conhecimentos com 10 questões por aula para garantir o aprendizado.
👨🎓 Público-Alvo
- Iniciantes em programação que querem dominar a manipulação de texto
- Estudantes de TI que buscam ferramentas poderosas para seus projetos
- Profissionais de Dados que trabalham com limpeza e extração de informações
- Desenvolvedores que precisam validar entradas de usuários de forma segura
📋 Pré-requisitos
- Computador com internet
- Conhecimento básico de lógica (opcional)
- Curiosidade para aprender uma linguagem "dentro das linguagens"
- Não é necessário ser um expert em programação!
🎖️ O Que Você Receberá
- ✅ 16 aulas completas e estruturadas
- ✅ Slides modernos e interativos
- ✅ 80 exercícios práticos progressivos
- ✅ 16 mini-projetos aplicados
- ✅ 160 questões de quiz para fixação
- ✅ Desafio de projeto final validador/extrator
🚀 Comece Agora
Pronto para dominar as Expressões Regulares?
Ir para Aula 01 Materiais de Apoio
Dúvidas? Entre em contato ou acesse o plano de ensino.
Materiais
Bem-vindo à seção de materiais complementares do curso. Aqui você encontra recursos adicionais para apoiar seus estudos.
-
- Acesse os slides de todas as aulas para revisão.
-
- Pratique com listas de exercícios para cada módulo.
-
- Teste seus conhecimentos com quizzes interativos.
-
- Desenvolva projetos práticos para aplicar o que aprendeu.
-
- Guias de instalação e configuração do ambiente.
Plano de Ensino 📅
Curso: Expressões Regulares (Regex)
Objetivo do Curso
Capacitar o aluno a compreender, construir e aplicar Expressões Regulares (Regex) para validação, busca, extração e transformação de textos em diferentes linguagens de programação e ferramentas.
Ementa
- Fundamentos: O que é Regex, Metacaracteres básicos, Conjuntos.
- Repetição e Posição: Quantificadores, Âncoras.
- Agrupamento e Captura: Parênteses, Referências, Alternância.
- Prática Multinível: JavaScript, Python, Validação de dados, Limpeza de texto.
Estrutura das Aulas (16 Aulas)
- Aula 01: Introdução ao Regex
- Aula 02: Estrutura Básica
- Aula 03: Metacaracteres Fundamentais
- Aula 04: Conjuntos de Caracteres
- Aula 05: Quantificadores
- Aula 06: Âncoras
- Aula 07: Agrupamentos e Captura
- Aula 08: Alternância
- Aula 09: Modificadores (Flags)
- Aula 10: Regex com JavaScript
- Aula 11: Regex com Python
- Aula 12: Validação de Dados Reais
- Aula 13: Extração de Dados
- Aula 14: Limpeza e Transformação
- Aula 15: Desempenho e Boas Práticas
- Aula 16: Projeto Final
Avaliação
- Exercícios práticos ao final de cada aula.
- Quizzes de fixação (16 quizzes).
- Projeto Final: Validador ou Extrator completo.
Aulas
Aulas do Curso 📚
Acesse aqui todo o conteúdo teórico dividido em dois grandes blocos: Fundamentos e Aplicações Práticas.
-
Módulo 1: Fundamentos e Sintaxe
A base essencial para dominar as Expressões Regulares.
-
Módulo 2: Regex na Prática
Aplicação prática em diferentes cenários e linguagens.
Aula 01 – Introdução ao Regex 🔍
Bem-vindo à primeira aula do curso de Expressões Regulares! Hoje vamos entender o que é esse "superpoder" e por que ele é essencial para qualquer pessoa que trabalhe com tecnologia.
🧐 O que são Expressões Regulares?
Uma Expressão Regular (ou Regex) é uma sequência de caracteres que forma um padrão de busca. Imagine que você está procurando uma agulha em um palheiro; o Regex é como um detector de metais ultra-sofisticado que te ajuda a encontrar exatamente o que você precisa.
Conceito Chave
Regex não é uma linguagem de programação, mas sim uma sintaxe poderosa suportada por quase todas as linguagens (JavaScript, Python, Java, PHP, etc.) e ferramentas (VS Code, Excel, Google Sheets).
🌍 Onde são utilizadas?
O Regex está em todo lugar, mesmo que você não perceba:
- Validação: Verificar se o que o usuário digitou é realmente um e-mail ou CPF.
- Busca e Substituição: Trocar todas as datas do formato
DD/MM/AAAAparaAAAA-MM-DD. - Extração: Retirar apenas os números de telefone de um bloco enorme de texto.
- Web Scraping: Coletar informações específicas de sites.
📊 Fluxo de Funcionamento
graph LR
A["Texto Bruto"] --> B{"Padrão Regex"}
B -- "Match" --> C["Resultado Encontrado"]
B -- "No Match" --> D["Nenhum Resultado"]
style B fill:#f9f,stroke:#333,stroke-width:4px
💻 Exemplos Práticos no Dia a Dia
Vamos ver como o Regex simplifica tarefas complexas:
Dica
Regex pode parecer assustador no começo devido à sua sintaxe "estranha", mas com prática, você verá que é uma ferramenta de produtividade incomparável.
🛠️ Ferramenta Indispensável: Regex101
Para testar suas expressões online sem precisar configurar nada, utilizaremos o Regex101.
Como usar:
- Selecione a linguagem (Flavor) no menu lateral (ex: JavaScript ou Python).
- Digite sua Expressão Regular no campo superior.
- Digite o Texto de Teste no campo central.
- Veja a mágica acontecer e a explicação detalhada no painel direito!
📝 Exercícios de Aquecimento
- Básico: No Regex101, digite o texto "Olá Mundo" e tente encontrar a palavra "Mundo" usando Regex literal.
- Básico: Qual a diferença entre pesquisar "Log" e "log" em um texto? (Dica: Pense em Maiúsculas/Minúsculas).
- Intermediário: Tente encontrar o número "2024" no texto "O ano atual é 2024".
- Intermediário: Como você buscaria a palavra "Regex" usando apenas metacaracteres se já soubesse que ela tem 5 letras? (Veremos isso na Aula 03, mas tente adivinhar!).
- Desafio: No Regex101, cole um parágrafo qualquer e tente destacar todas as letras "a" (minúsculas).
🚀 Mini-Projeto: O Primeiro Match
Objetivo: Validar manualmente uma palavra em uma frase.
- Abra o Regex101.
- Crie um padrão para encontrar seu próprio nome em um texto que descreve quem você é.
- Ative a flag
i(Ignore Case) e veja se o nome continua sendo encontrado mesmo se você mudar a caixa das letras.
Aula 02 – Estrutura Básica de uma Expressão Regular 🏗️
Nesta aula, vamos mergulhar na fundação do Regex: a busca por textos fixos e como as máquinas interpretam as letras.
🔡 Texto Literal
A forma mais simples de Regex é o texto literal. Se você digitar gato no seu buscador Regex, ele encontrará exatamente a sequência de letras "g", "a", "t", "o", nessa ordem.
Atenção
O Regex procura por padrões exatos. Se você buscar por gato, as palavras Gato ou GATO não serão encontradas por padrão, pois a busca é sensível a maiúsculas e minúsculas.
🔠 Sensibilidade (Case Sensitivity)
Por padrão, a maioria dos motores de Regex diferencia A de a.
- Padrão:
casa - Texto: "A casa é verde." ✅ (Match)
- Texto: "Minha Casa, minha vida." ❌ (No Match)
Dica
Para ignorar essa diferença, usamos a flag i (Ignore Case). Com ela, casa encontraria CASA, cAsA, etc.
📊 Diagrama de Fluxo de Busca Literal
graph TD
Start((Início)) --> CheckG{Letra 'g'?}
CheckG -- Sim --> CheckA{Letra 'a'?}
CheckG -- Não --> Next["Próximo caractere"]
CheckA -- Sim --> CheckT{Letra 't'?}
CheckA -- Não --> Next
CheckT -- Sim --> CheckO{Letra 'o'?}
CheckT -- Não --> Next
CheckO -- Sim --> Match((MATCH!))
CheckO -- Não --> Next
Next --> CheckG
💻 Primeiros Testes Práticos em Terminal
Podemos usar o Regex até no seu computador para filtrar arquivos ou textos.
📝 Exercícios de Fixação
- Básico: Crie uma expressão para encontrar a palavra "Python" em um parágrafo. Funciona se o texto estiver escrito "python"?
- Básico: No Regex101, use o texto "O rato roeu a roupa do rei". Tente dar match na palavra "rato".
- Intermediário: Tente encontrar a palavra "programação" (com acento). O Regex literal exige o acento?
- Intermediário: Como você buscaria o número "123" usando texto literal?
- Desafio: No Regex101, experimente ativar e desativar a flag
ino canto superior direito e observe o que muda ao buscar por seu próprio nome.
🚀 Mini-Projeto: Localizador de Erros
Objetivo: Encontrar mensagens de erro em um log simulado.
- Cole o seguinte texto no Regex101:
- Crie um Regex literal para encontrar apenas
SYSTEM_ERROR. - Agora, use a flag
ipara encontrar as duas ocorrências de erro (tanto maiúscula quanto minúscula).
Aula 03 – Metacaracteres Fundamentais 🔣
Bem-vindo ao coração do Regex! Metacaracteres são símbolos especiais que não representam a si mesmos, mas sim conceitos como "qualquer número" ou "qualquer letra".
⏺️ O Ponto (.) - O Coringa
O ponto é o metacaractere mais versátil. Ele dá match em qualquer caractere único, exceto quebras de linha.
- Padrão:
c.sa - Match:
casa,cosa,c1sa,c#sa.
Conceito
O . é como uma peça de Lego que se encaixa em qualquer buraco de um único caractere.
🔢 Atalhos de Classes (\d, \w, \s)
Existem atalhos para grupos comuns que facilitam muito a nossa vida:
| Metacaractere | O que significa | Exemplo |
|---|---|---|
\d |
Digit (Qualquer número de 0 a 9) | 9, 5 |
\w |
Word (Letras, números e underline _) |
a, B, 7, _ |
\s |
Space (Espaços, tabs e quebras de linha) | , \t |
Dica
Se você usar a letra maiúscula (\D, \W, \S), você está fazendo a negação. Por exemplo, \D significa "qualquer coisa que NÃO seja um número".
📊 Tabela de Correspondências
graph TD
Text["Texto: A1 _"] --> D["\d"]
Text --> W["\w"]
Text --> S["\s"]
D --> MatchD["Matches: 1"]
W --> MatchW["Matches: A, 1, _"]
S --> MatchS["Matches: ' ' (espaço)"]
🛡️ O Caractere de Escape (\)
E se você quiser procurar por um ponto real (como em um endereço de IP)? Como o . é um metacaractere, você precisa "desativar" o poder dele usando a barra invertida \.
- Padrão:
google.com(Errado: o ponto encontrará qualquer coisa) - Padrão:
google\.com(Certo: encontra exatamente o ponto final)
💻 Exemplo em TermynalJS
📝 Exercícios de Fixação
- Básico: Crie um Regex para encontrar datas no formato
00/00usando\d. - Básico: Use o
.para encontrar as palavrascola,celaecilacom um único padrão. - Intermediário: Como você buscaria um nome de usuário que tem 3 letras seguidas de um underline? (Ex:
abc_). - Intermediário: Tente dar match em um valor monetário simples como
$ 5usando\$ \s \d. - Desafio: No Regex101, tente encontrar todas as palavras em um texto que possuam exatamente 4 letras usando
\w\w\w\w.
🚀 Mini-Projeto: Extrator de Versões
Objetivo: Identificar versões de software em um texto.
- Texto:
A versão estável é v1.4, mas testamos a v1.a e a v2.0. - Crie um Regex que capture apenas as versões válidas (v + número + ponto + número).
- Dica: Use
v\d\.\d.
Aula 04 – Conjuntos de Caracteres 📦
E se você quiser encontrar uma vogal, mas não souber qual? Ou apenas letras minúsculas? É aqui que entram os Conjuntos de Caracteres.
🔡 O que são Conjuntos?
Um conjunto é definido entre colchetes []. Ele diz ao Regex: "Dê match em qualquer um dos caracteres que estão aqui dentro".
- Padrão:
[aeiou] - Texto: "bola" -> Encontra
o, depoisa.
📏 Usando Intervalos (Ranges)
Em vez de digitar todos os números ou letras, podemos usar o hífen - para definir um intervalo.
| Conjunto | Descrição |
|---|---|
[a-z] |
Qualquer letra minúscula de 'a' até 'z'. |
[A-Z] |
Qualquer letra maiúscula de 'A' até 'Z'. |
[0-9] |
Qualquer número de 0 a 9 (o mesmo que \d). |
[a-zA-Z] |
Qualquer letra, independente da caixa. |
Flexibilidade
Você pode combinar tudo: [a-f0-3] encontrará as letras de 'a' a 'f' e os números de 0 a 3.
📊 Visualização de Conjuntos
graph LR
Input["Texto: 'B3'"] --> Set["Conjunto: [A-Z][0-9]"]
Set --> Match["Match: 'B' e '3'"]
🚫 Negação ([^...])
Se você colocar um circunflexo ^ logo após o primeiro colchete, o conjunto se torna uma negação. Ele encontrará qualquer coisa que NÃO esteja na lista.
- Padrão:
[^0-9] - Significado: Qualquer caractere que NÃO seja um número.
Atenção
O ^ só tem poder de negação se for o primeiro caractere dentro dos colchetes. Se estiver fora, ele tem outra função (veremos na Aula 06).
💻 Exemplo em TermynalJS
📝 Exercícios de Fixação
- Básico: Crie um Regex que encontre apenas as letras 'x', 'y' ou 'z'.
- Básico: Use um intervalo para encontrar qualquer letra entre 'm' e 'q'.
- Intermediário: Crie um padrão que localize todas as consoantes minúsculas (Dica: Pense em negação de vogais ou lista completa).
- Intermediário: Como você buscaria um caractere que seja uma letra maiúscula ou um dígito?
- Desafio: No Regex101, tente criar um padrão que encontre um código de 3 caracteres onde o primeiro é uma letra maiúscula, o segundo é um número e o terceiro é uma letra minúscula.
🚀 Mini-Projeto: Filtro de Placas (Básico)
Objetivo: Identificar o início de uma placa de carro antiga (3 letras).
- Texto:
ABC-1234, xyz-9999, DEF-0000. - Crie um Regex que pegue apenas os conjuntos de 3 letras maiúsculas.
- Dica: Use
[A-Z][A-Z][A-Z].
Aula 05 – Quantificadores 🔢
Até agora, cada símbolo que escrevemos representava exatamente uma posição no texto. Com os Quantificadores, podemos dizer: "Encontre este padrão várias vezes seguidas".
➕ Os Quantificadores Básicos
Eles são colocados logo após o caractere ou conjunto que você quer repetir.
| Símbolo | Significado | Exemplo (a...) |
|---|---|---|
* |
Zero ou mais vezes. | a* encontra "", "a", "aaaa" |
+ |
Uma ou mais vezes. | a+ encontra "a", "aaaa" (mínimo 1) |
? |
Opcional (Zero ou uma vez). | a? encontra "" ou "a" |
🎯 Quantidade Exata {n,m}
Se você precisa de um controle mais fino, usamos as chaves.
{n}: Exatamentenvezes. (Ex:\d{3}para 3 dígitos).{n,}: No mínimonvezes. (Ex:\w{5,}para palavras longas).{n,m}: Entrenemvezes. (Ex:\d{2,4}para anos com 2 ou 4 dígitos).
📊 Funcionamento Visual
graph TD
Start["Padrao: \d+"] --> Case1["Texto: '1' -> Match: '1'"]
Start --> Case2["Texto: '123' -> Match: '123'"]
Start --> Case3["Texto: 'abc' -> No Match"]
🧠 Guloso vs. Preguiçoso (Greedy vs Lazy)
Por padrão, os quantificadores são gulosos: eles tentam pegar o máximo de texto possível.
- Texto:
"capítulo 1" e "capítulo 2" - Padrão:
".*"-> Pegará desde a primeira aspa até a última. - Padrão Preguiçoso:
".*?"-> Pegará apenas o primeiro conteúdo entre aspas.
Dica
Adicione o ? após um quantificador (como +? ou *?) para torná-lo preguiçoso.
💻 Exemplo em TermynalJS
📝 Exercícios de Fixação
- Básico: Crie um Regex que encontre a palavra "casa" seguida de um ou mais espaços.
- Básico: Use o
?para encontrar tanto "cor" quanto "color" (em inglês, color vs colour). - Intermediário: Crie um padrão para validar um número de telefone simples com 8 ou 9 dígitos (ex:
988887777). - Intermediário: Use
\d{1,3}para encontrar todos os números entre 1 e 999 em um texto. - Desafio: No Regex101, tente capturar tudo o que está dentro de uma tag HTML
<div>...</div>de forma que ele pare no primeiro fechamento de tag (preguiçoso).
🚀 Mini-Projeto: Validador de Usuário
Objetivo: Validar um nome de usuário que deve: - Começar com uma letra. - Ter entre 5 e 12 caracteres alfanuméricos.
- Dica: Use
[a-zA-Z]\w{4,11}. - Por que
{4,11}? Porque a primeira letra já conta como 1 caractere! - Teste com:
admin,user123,a,meu_usuario_muito_longo.
Aula 06 – Âncoras ⚓
Até agora, nossos padrões encontravam correspondências em qualquer lugar do texto. As Âncoras servem para fixar a busca em uma posição específica: o início ou o fim do texto/linha.
🔝 Início da Linha (^)
O símbolo ^ (circunflexo), quando usado fora de colchetes, indica que o padrão deve começar exatamente no início da linha.
- Texto:
Engenharia de Software - Padrão:
^Engenharia-> ✅ Match - Padrão:
^Software-> ❌ No Match (pois 'Software' não está no início)
🔚 Fim da Linha ($)
O símbolo $ (cifrão) indica que o padrão deve estar exatamente no fim da linha.
- Texto:
projeto.js - Padrão:
js$-> ✅ Match - Padrão:
projeto$-> ❌ No Match
🛡️ Validação Completa de Campos
Este é o uso mais importante das âncoras. Ao combinar ^ no início e $ no fim, você garante que o texto inteiro obedeça à regra, sem "lixo" antes ou depois.
| Padrão | O que aceita | Exemplo "2024" |
|---|---|---|
\d{4} |
Qualquer lugar | "Em 2024..." ✅ |
^\d{4}$ |
Apenas o número | "2024" ✅ |
^\d{4}$ |
Texto misto | "Ano 2024" ❌ |
📊 Visualização de Âncoras
graph LR
S["^"] -- "Começa aqui" --> Text["Texto alvo"]
Text -- "Termina aqui" --> E["$"]
style S fill:#f96
style E fill:#f96
💻 Exemplo em TermynalJS
📝 Exercícios de Fixação
- Básico: Crie um Regex que verifique se uma frase começa com a palavra "Bem-vindo".
- Básico: Crie um Regex que localize arquivos que terminam com a extensão
.pdf. - Intermediário: Tente validar uma linha que deve conter exatamente 5 dígitos, sem nada antes ou depois.
- Intermediário: Como você buscaria uma linha que começa com um número e termina com um ponto final?
- Desafio: No Regex101, use o texto:
Ative a flag
m(multiline) e tente encontrar todas as linhas que terminam com a palavralinha.
🚀 Mini-Projeto: Validador de ID
Objetivo: Validar um código de produto que deve ter exatamente:
- 2 letras maiúsculas no início.
- Seguidas por um hífen -.
- Terminadas por 4 números.
- Dica: Use
^[A-Z]{2}-\d{4}$. - Teste com:
AB-1234(✅),abc-1234(❌),AB-123(❌),Z-9999(❌).
Aula 07 – Agrupamentos e Captura 🎯
As vezes não queremos apenas encontrar um texto, mas sim isolar uma parte dele para usar mais tarde. É aqui que os parênteses () entram em cena.
📦 Grupos de Captura ()
Ao envolver parte do seu Regex em parênteses, você cria um grupo. Isso permite: 1. Aplicar quantificadores a um grupo inteiro. 2. Extrair aquela parte específica do texto.
- Padrão:
(abc)+-> Encontra "abc", "abcabc", "abcabcabc". - Sem parênteses:
abc+-> Encontra "abccccccc" (apenas o 'c' repete).
🔢 Referências Internas (Backreferences)
O motor de Regex "lembra" o que foi capturado em cada parênteses. Você pode usar \1, \2, etc., para repetir o que foi encontrado no primeiro ou segundo grupo.
- Padrão:
<(\w+)>.*?</\1> - Exemplo: Ele garante que se abriu uma tag
<b>, ela deve fechar com</b>, e não com</i>.
Numeração
Os grupos são numerados pela ordem em que os parênteses abrem. O grupo 0 é sempre o match completo.
📊 Estrutura de Grupos
graph TD
P["(Grupo 1) e (Grupo 2)"] --> G1["\1"]
P --> G2["\2"]
G1 -- "Contém" --> V1["Conteúdo 1"]
G2 -- "Contém" --> V2["Conteúdo 2"]
💻 Exemplo em TermynalJS (Substituição)
No terminal ou editores, podemos usar grupos para trocar a ordem das coisas.
📝 Exercícios de Fixação
- Básico: Crie um Regex que capture o código de área e o número de um telefone separadamente:
(11) 9999-8888. - Básico: Use parênteses para repetir a palavra "Erro" 3 vezes:
ErroErroErro. - Intermediário: No Regex101, use um texto com datas
21/10/2024e capture o dia, o mês e o ano em 3 grupos diferentes. - Intermediário: Como você buscaria uma palavra que se repete duas vezes seguidas separada por espaço? (Ex:
tchau tchau). Dica: use\1. - Desafio: Crie um padrão que extraia apenas o nome de usuário de um e-mail
contato@empresa.com(tudo o que vem antes do@).
🚀 Mini-Projeto: Extrator de Preços
Objetivo: Extrair a moeda e o valor separadamente de uma lista de produtos.
- Texto:
Cadeira: R$ 150, Mesa: US$ 300, Sofá: € 500. - Regex:
([A-Z\$]+)\s?(\d+). - No Regex101, observe no painel lateral como ele separa os "Capture Groups" para cada item encontrado.
- Dessa forma, um sistema poderia converter os valores automaticamente consultando o grupo 1 (moeda)!
Aula 08 – Alternância 🔀
E se você precisar encontrar "cachorro" OU "gato"? O operador de Alternância | (pipe) é o "OU" do Regex.
🏗️ O Operador |
A alternância permite que você defina várias opções de match. Ela verifica se o texto corresponde à opção da esquerda ou da direita.
- Padrão:
cachorro|gato - Match: Encontra tanto "cachorro" quanto "gato".
Prioridade
O Regex tenta o match da esquerda para a direita. No padrão ab|abc, se o texto for "abc", ele pode dar match em "ab" e parar (dependendo do motor), por isso é boa prática colocar o padrão mais longo primeiro: abc|ab.
📦 Alternância com Agrupamento
Geralmente usamos a alternância dentro de parênteses para limitar o "poder" do OU.
- Padrão:
venda (carro|moto) - Match:
venda carro,venda moto. - Sem parênteses:
venda carro|moto-> Encontrariavenda carroOU apenasmoto.
📊 Árvore de Decisão
graph TD
Start["Texto: 'moto'"] --> Check1{"venda carro?"}
Check1 -- Não --> Check2{"moto?"}
Check2 -- Sim --> Match((MATCH!))
💻 Exemplo em TermynalJS
📝 Exercícios de Fixação
- Básico: Crie um Regex que encontre as cores "verde", "amarelo" ou "azul".
- Básico: Use a alternância para encontrar os nomes "João" ou "Maria".
- Intermediário: Crie um padrão que localize arquivos com extensões
.pdfou.docx. - Intermediário: Como você buscaria as saudações "Bom dia", "Boa tarde" ou "Boa noite" usando agrupamento? Dica:
Bo(m dia|a tarde|a noite). - Desafio: No Regex101, crie um padrão que valide se uma palavra é "SIM", "S", "NAO" ou "N" (use a flag
i).
🚀 Mini-Projeto: Filtro de Protocolos
Objetivo: Identificar se uma URL utiliza protocolos seguros ou comuns.
- Texto:
http://site.com, https://seguro.org, ftp://files.net, ssh://server. - Regex:
(http|https|ftp|ssh)://. - No Regex101, veja como ele destaca apenas o protocolo inicial.
- Extra: Tente simplificar
http|httpsparahttps?.
Aula 09 – Modificadores (Flags) 🚩
Até agora, aprendemos a sintaxe estrutural. As Flags (ou Modificadores) são configurações globais que mudam o comportamento de como o motor de Regex processa o texto.
🏳️ As Flags Mais Comuns
Elas geralmente são colocadas após a barra final de um Regex: /padrão/flags.
| Flag | Nome | Descrição |
|---|---|---|
| i | Ignore Case | Ignora a diferença entre Maiúsculas e Minúsculas. |
| g | Global | Encontra todas as ocorrências, não apenas a primeira. |
| m | Multiline | Faz as âncoras ^ e $ funcionarem para cada linha. |
| s | Dot All | Faz o ponto . dar match também em quebras de linha (\n). |
🔄 Global (g) vs Single Match
Sem a flag global, o Regex para assim que encontra o primeiro resultado.
- Texto:
casa, casa, casa - Padrão
/casa/: Encontra apenas a primeira "casa". - Padrão
/casa/g: Encontra as três instâncias.
📊 Resumo Visual das Flags
graph TD
P["Padrão: /erro/"] --> NoFlag["Sem Flags: Encontra 'erro' (1ª vez)"]
P --> FlagI["Flag 'i': Encontra 'erro', 'ERRO', 'Erro'"]
P --> FlagG["Flag 'g': Encontra todas as vezes"]
P --> FlagM["Flag 'm': ^ e $ olham cada linha"]
💻 Exemplo em TermynalJS
Em comandos de terminal, as flags costumam ser opções (como -i para ignore case).
📝 Exercícios de Fixação
- Básico: No Regex101, busque por "regex" em um parágrafo e ative a flag
g. Observe os múltiplos destaques. - Básico: Ative a flag
ie tente dar match em "TEXTO" usando o padrãotexto. - Intermediário: Use a flag
mpara encontrar o início de cada linha em um texto com vários parágrafos. - Intermediário: Qual flag você usaria para garantir que o ponto
.capture todo o conteúdo de um arquivo HTML, incluindo as quebras de linha? - Desafio: No Regex101, experimente combinar flags:
/padrao/gi. O que isso faz?
🚀 Mini-Projeto: Limpador de Logs
Objetivo: Destacar todas as linhas que contenham erros, independente da caixa.
- Texto:
- Regex:
^.*error.*$ - Flags necessárias:
g(para pegar todos),i(para pegar as variações de 'error') em(para o^e$olharem cada linha).
Aula 10 – Regex na Prática com JavaScript 📜
Agora que você já conhece a teoria, vamos aplicá-la em código real! O JavaScript possui um suporte excelente para Regex, utilizando o objeto RegExp ou a sintaxe de barras /padrao/.
🛠️ Três Métodos Essenciais
Em JavaScript, usamos Regex principalmente de três formas:
1. regex.test(string)
Retorna um booleano (true ou false). Ideal para validação.
const regexEmail = /^[a-z]+@gmail\.com$/;
console.log(regexEmail.test("contato@gmail.com")); // true
2. string.match(regex)
Retorna um array com as correspondências encontradas. Ótimo para extração.
const texto = "Match 1 e Match 2";
const encontrados = texto.match(/\d/g);
console.log(encontrados); // ["1", "2"]
3. string.replace(regex, novoTexto)
Substitui o que foi encontrado por um novo texto. Perfeito para limpeza e transformação.
📊 Fluxo no JavaScript
graph LR
A["RegExp Object"] --> B["test() -> Boolean"]
A --> C["match() -> Array"]
A --> D["replace() -> String"]
💻 Exemplo em TermynalJS (Node.js)
📝 Exercícios de Fixação
- Básico: Crie uma variável que contenha um Regex para validar se uma string é composta apenas por letras minúsculas:
const regex = /.../. - Básico: Use o método
.test()para verificar se a palavra "sucesso" está contida na frase "O curso é um sucesso!". - Intermediário: Dado o texto
contato: 11-9999-8888, use.match()com a flaggpara extrair todos os números. - Intermediário: Use
.replace()para trocar todos os espaços de uma frase por sublinhados (_). - Desafio: Crie uma função que receba uma senha e use
.test()para garantir que ela tenha pelo menos um número e pelo menos 6 caracteres.
🚀 Mini-Projeto: Validador de Formulário (JS)
Objetivo: Criar um script que valide um campo de nome de usuário.
- Regra: O nome deve ter entre 3 e 15 letras, sem números.
- Código:
- Teste mudando o valor da variável
username.
Aula 11 – Regex com Python 🐍
Python é uma das linguagens mais poderosas para processamento de texto e dados. Para usar Regex, utilizamos a biblioteca padrão re.
📦 A Biblioteca re
Diferente do JavaScript, no Python os métodos de Regex fazem parte de um módulo que você precisa importar.
1. re.search(padrao, string)
Procura a primeira ocorrência do padrão. Retorna um objeto de "Match" ou None.
2. re.findall(padrao, string)
Retorna uma lista com todas as ocorrências encontradas.
3. re.sub(padrao, substituto, string)
Substitui as ocorrências por um novo texto (equivalente ao .replace do JS).
🏗️ O uso do r"" (Raw Strings)
Em Python, sempre use o prefixo r antes das aspas do seu Regex. Isso evita que o Python interprete as barras invertidas \ como comandos especiais dele mesmo.
- Correto:
re.search(r"\d", texto) - Errado:
re.search("\d", texto)(pode causar bugs!)
💻 Exemplo em TermynalJS (Python CLI)
📝 Exercícios de Fixação
- Básico: Importe a biblioteca
ree verifique se a palavra "Python" existe na frase "Aprendendo Python com Regex". - Básico: Use
findall()para extrair todos os números de uma string:"Pedidos #102, #305 e #400". - Intermediário: Use
re.sub()para remover todos os parênteses de um número de telefone:(11) 9999-8888. - Intermediário: Crie um script que use
re.search()para encontrar a primeira data no formatoDD/MM/AAAA. - Desafio: Crie uma função em Python que receba uma lista de e-mails e retorne apenas os que terminam em
@empresa.com.
🚀 Mini-Projeto: Extrator de Links (Python)
Objetivo: Extrair todas as URLs de um bloco de texto.
- Código Sugerido:
- Desafio: Tente fazer o
findallretornar apenas o domínio (sem o http).
Aula 12 – Validação de Dados Reais ✅
Nesta aula, vamos colocar em prática tudo o que aprendemos para construir validadores de dados comuns no dia a dia do desenvolvimento.
📧 Validação de E-mail
Validar e-mail com Regex é um dos temas mais debatidos, pois existem formatos muito complexos. Vamos focar em uma versão robusta e prática:
- Padrão:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ - Explicação:
^...$: Garante que o texto inteiro é o e-mail.[a-zA-Z0-9._%+-]+: Usuário (letras, números e alguns símbolos).@: O símbolo obrigatório.[a-zA-Z0-9.-]+: Domínio.\.[a-zA-Z]{2,}: Extensão (ex: .com, .org, .com.br).
🆔 Validação de CPF (Formato)
Lembrando que o Regex valida apenas o formato (máscara), não a lógica do dígito verificador.
- Formato:
000.000.000-00 - Padrão:
^\d{3}\.\d{3}\.\d{3}-\d{2}$ - Com pontos opcionais:
^\d{3}\.?\d{3}\.?\d{3}-?\d{2}$
📱 Validação de Telefone (Brasil)
- Formato:
(11) 99999-8888 - Padrão:
^\(\d{2}\)\s\d{4,5}-\d{4}$
📊 Tabela de Padrões Reais
| Dado | Regex Sugerido |
|---|---|
| Data (DD/MM/AAAA) | ^\d{2}/\d{2}/\d{4}$ |
| CEP | ^\d{5}-\d{3}$ |
| Hora (24h) | ^([01]\d|2[0-3]):[0-5]\d$ |
💻 Exemplo em TermynalJS (Validação Única)
📝 Exercícios de Fixação
- Básico: Crie um Regex para validar um CEP no formato
00000-000. - Básico: Melhore o validador de CPF para aceitar tanto números com pontos quanto apenas números (
12345678900). - Intermediário: Crie um validador de URL simples que comece com
https://e termine com.com. - Intermediário: Valide um horário no formato
HH:MM. - Desafio: No Regex101, crie um padrão para "Senhas Fortes" que exija: Mínimo 8 caracteres, pelo menos uma letra e pelo menos um número. (Use o que aprendeu, não precisa ser uma única expressão se for difícil demais agora!).
🚀 Mini-Projeto: Validador de Senhas
Objetivo: Verificar se uma senha atende aos requisitos mínimos de segurança.
- Regra: A senha deve ter entre 8 e 20 caracteres e conter ao menos um caractere especial (
!@#$%*). - Regex sugerido:
^[\w!@#$%*]{8,20}$(Note: este aceita, mas não obriga o especial, para obrigar precisaríamos de lookaheads, que é avançado. Por enquanto, valide se ela contém apenas os permitidos e o tamanho). - Teste com:
senha123(✅),123(❌),senha_muito_longa_que_passa_do_limite(❌).
Aula 13 – Extração de Dados ⛏️
Buscar padrões é útil, mas extrair informações específicas de uma massa de texto é onde o Regex economiza horas de trabalho manual.
📅 Extraindo Datas
Imagine um log de sistema com milhares de linhas. Como extrair apenas as datas das ocorrências?
- Texto:
O sistema falhou em 21/10/2024 e novamente em 23/10/2024. - Regex:
\d{2}/\d{2}/\d{4} - Resultado:
["21/10/2024", "23/10/2024"]
🏷️ Extraindo Hashtags e Menções
Muito comum em análise de redes sociais.
- Hashtags:
#[a-zA-Z\d_]+ - Menções (@):
@[a-zA-Z\d_]+
🔗 Extraindo Links de HTML
Extrair o atributo src de imagens ou href de links.
- Regex para Links:
href="([^"]+)" - Explicação: Captura tudo o que está dentro das aspas do
href.
📊 Fluxo de Extração
graph TD
Data["Documento Grande (PDF/Log)"] --> Regex["Motor de Busca (findall)"]
Regex --> List["Lista de Resultados"]
List --> Clean["Dados Limpos e Prontos"]
💻 Exemplo em TermynalJS (grep -o)
A flag -o do grep é excelente para extração, pois ela retorna apenas a parte que deu match, e não a linha inteira.
📝 Exercícios de Fixação
- Básico: Crie um Regex para extrair todos os valores monetários de uma lista:
R$ 10, R$ 50, R$ 100. - Básico: Extraia todas as palavras que possuem exatamente 3 letras de um parágrafo.
- Intermediário: Dado um texto com vários nomes de usuários no formato
@usuario, extraia apenas o nome (sem o @) usando grupos de captura. - Intermediário: Extraia todos os números de telefone de uma página de contatos.
- Desafio: No Regex101, tente extrair o conteúdo de dentro de todos os títulos
<h1>...</h1>de um código HTML simulado.
🚀 Mini-Projeto: Analisador de Logs
Objetivo: Extrair os IPs e os horários de acesso de um log de servidor.
- Texto de Exemplo:
- Regex para IP:
\d{1,3}(\.\d{1,3}){3} - Regex para Hora:
\[(\d{2}:\d{2}:\d{2})\] - Crie um script (JS ou Python) que percorra essas linhas e imprima: "O IP X acessou o sistema às Y horas".
Aula 14 – Limpeza e Transformação 🧼
Muitas vezes recebemos dados "sujos": com espaços extras, formatos inconsistentes ou informações desnecessárias. O Regex é o "sabão" ideal para limpar esses dados.
🧹 Removendo Espaços Extras
Espaços em branco antes, depois ou duplos no meio do texto são vilões de bancos de dados.
- Espaços no início/fim:
^\s+|\s+$ - Espaços duplos:
\s{2,}(substituir por um único espaço" ").
🔄 Transformando Formatos (Reordenação)
Usando grupos de captura, podemos mudar a ordem das informações.
- Transformar:
2024-10-21(ISO) ->21/10/2024(BR) - Regex:
(\d{4})-(\d{2})-(\d{2}) - Substituição:
$3/$2/$1
🎭 Mascarando Dados Sensíveis
Esconder partes de um código ou e-mail por segurança.
- Texto:
123.456.789-00 - Regex:
\d(?=\d{2})(Usa um lookahead para pegar todos os números exceto os dois últimos). - Substituição:
* - Resultado:
***.***.***-00
📊 Fluxo de Transformação
graph LR
Input["Dado Sujo"] --> Find["Padrão Regex"]
Find --> Replace["Ação: Reorder / Delete / Replace"]
Replace --> Output["Dado Pronto"]
💻 Exemplo em TermynalJS (JS Replace)
Olá
'.replace(/<[^>]+>/g, ''))" $ Olá $ $ # Limpando caracteres não-numéricos de um telefone $ node -e "console.log('(11) 9999-8888'.replace(/\D/g, ''))" $ 1199998888📝 Exercícios de Fixação
- Básico: Crie um Regex para remover todos os parênteses e traços de um CPF.
- Básico: Use
.replace()para trocar todas as letras "a" por "@" em uma frase. - Intermediário: Dado um nome completo
"Pires, Ricardo", use Regex para transformá-lo em"Ricardo Pires". (Dica: Use dois grupos e troque sua ordem). - Intermediário: Crie um padrão que remova todas as quebras de linha duplas, transformando-as em apenas uma.
- Desafio: No Regex101, use a aba "Substitution" para transformar uma lista de preços no formato
150.00para o formato brasileiro150,00usando grupos.
🚀 Mini-Projeto: Sanitizador de Inputs
Objetivo: Criar uma função que "limpe" um nome de usuário, removendo qualquer caractere que não seja uma letra ou número.
- Código Sugerido (JS):
- Desafio: Modifique a função para que ela também converta tudo para minúsculas após a limpeza.
Aula 15 – Desempenho e Boas Práticas ⚡
Nem tudo que funciona é eficiente. Um Regex mal escrito pode travar um servidor ou tornar uma aplicação lenta. Vamos aprender a escrever padrões profissionais.
🐢 O Perigo do Backtracking
Backtracking acontece quando o motor de Regex tenta várias combinações e falha, precisando "voltar" e tentar de novo. Casos extremos levam ao Catastrophic Backtracking.
- Exemplo Ruim:
(a+)+b - Se você testar isso em uma string com muitos 'a's e nenhum 'b', o computador fará bilhões de cálculos inúteis.
Cuidado
Evite aninhar quantificadores (como (a*)*).
🚀 Dicas de Performance
- Seja Específico: Em vez de
.*(que pega tudo), use[a-z]+se você sabe que só haverá letras. - Use Âncoras:
^e$ajudam o motor a falhar rápido se o padrão já não bater no início/fim. - Grupos de Não-Captura: Se você não precisa extrair o dado, use
(?:...)em vez de(...). Isso economiza memória. - Falhe Cedo: Coloque os padrões mais comuns primeiro na alternância
|.
🎓 Boas Práticas de Legibilidade
Regex pode ser ilegível. Ajude seus colegas (e seu eu do futuro):
- Comente: Documente o que aquele "hieroglifo" faz.
- Não reinvente a roda: Use bibliotecas consagradas para validações ultra-complexas (como e-mail).
- Teste Sempre: Use ferramentas como Regex101 com exemplos reais antes de colocar em produção.
📊 Comparativo de Performance
graph LR
P1["Padrão Amplo (.*)"] -- "Lento" --> Engine["Motor Regex"]
P2["Padrão Específico (\d+)"] -- "Rápido" --> Engine
Engine --> Result["Resultado"]
💻 Exemplo em TermynalJS (Otimização)
📝 Exercícios de Fixação
- Básico: Transforme o grupo
(abc)em um grupo de não-captura. - Básico: Reescreva o padrão
.*para algo que procure apenas por números de 0 a 9. - Intermediário: Identifique o erro de performance no padrão
(a|b|c|d|e|f|g)+e como simplificá-lo usando conjuntos[]. - Intermediário: Por que usar
^em um validador de formulário melhora a performance em relação a uma busca sem âncora? - Desafio: No Regex101, observe o painel "Regex Debugger" enquanto testa o padrão
(a+)+ccontra a stringaaaaaaaaaaaaab. Veja quantos passos o motor executa antes de falhar.
🚀 Mini-Projeto: Auditor de Regex
Objetivo: Analisar um Regex existente e sugerir melhorias.
- Regex Alvo:
^.*@.*\..*$(Um validador de e-mail bem ruim). - Problemas:
.*é muito genérico e pode causar lentidão. - Sugerir uma versão mais específica usando conjuntos de caracteres (visto na Aula 12).
- Explique por que a nova versão é mais segura contra ataques de negação de serviço (ReDoS).
Aula 16 – Projeto Final: O Grande Desafio 🏆
Parabéns! Você chegou à última aula do curso. Agora é hora de consolidar tudo o que aprendeu em um desafio prático que simula uma tarefa real de um Engenheiro de Dados ou Desenvolvedor Backend.
🎯 O Cenário
Você recebeu um arquivo de texto bruto (OCR) gerado a partir de notas fiscais antigas. O texto está bagunçado, com espaços extras, diferentes formatos de data e valores misturados. Sua missão é criar um "Sanitizador de Notas" usando Regex.
Dados de Exemplo:
NOTA_FISCAL #001 - DATA: 21-10-2024 - VALOR: R$ 150,00 - STATUS: Pago
nota_fiscal #002 | DATA: 22/10/2024 | VALOR: 300.00 | STATUS: pendente
NF #003; dt: 23.10.2024; val: R$ 50,50; st: PAGO
🛠️ Requisitos do Projeto
O seu algoritmo (em JS, Python ou apenas Regex) deve ser capaz de:
- Normalizar o Título: Identificar "NOTA_FISCAL", "nota_fiscal" ou "NF" e transformar tudo em "NF".
- Padronizar a Data: Converter todos os formatos (
-,/,.) para o padrão brasileiroDD/MM/AAAA. - Limpar o Valor: Extrair apenas o número decimal (ex:
150,00). - Normalizar o Status: Transformar "pendente", "Pago" ou "PAGO" em letras maiúsculas:
PAGOouPENDENTE.
📊 Estrutura de Solução Proposta
graph TD
Raw["Texto Bruto"] --> T1["Normalizar Títulos (Alternância)"]
T1 --> T2["Normalizar Datas (Grupos de Captura)"]
T2 --> T3["Extrair Valores (Dígitos e Vírgula)"]
T3 --> T4["Normalizar Status (Lower/Upper Case)"]
T4 --> Final["JSON / CSV Limpo"]
💻 Exemplo de Saída Esperada
Após o processamento, os dados devem estar assim:
- NF #001 | 21/10/2024 | 150,00 | PAGO
- NF #002 | 22/10/2024 | 300,00 | PENDENTE
- NF #003 | 23/10/2024 | 50,50 | PAGO
📝 Exercício Final: O Script Completo
Tente implementar a solução acima na linguagem de sua preferência.
Dica de Python:
import re
linha = "NOTA_FISCAL #001 - DATA: 21-10-2024 - VALOR: R$ 150,00 - STATUS: Pago"
# 1. Normalizar Título
linha = re.sub(r"(NOTA_FISCAL|nota_fiscal|NF)", "NF", linha)
# 2. Normalizar Data
linha = re.sub(r"(\d{2})[-.](\d{2})[-.](\d{4})", r"\1/\2/\3", linha)
# 3. Limpar Status
if "Pago" in linha or "PAGO" in linha:
linha = re.sub(r"STATUS: \w+", "STATUS: PAGO", linha, flags=re.I)
print(linha)
🎨 Conclusão do Curso
Expressões Regulares são uma ferramenta vital. Você não precisa memorizar tudo, mas agora você sabe: - O que procurar: Qual metacaractere resolve seu problema. - Onde testar: Usando o Regex101. - Como aplicar: Em JavaScript, Python ou no Terminal.
Continue praticando e use esse superpoder para automatizar tarefas chatas no seu dia a dia! 🚀
Exercicios
Listas de Exercícios 🏋️
Pratique o que aprendeu com listas graduadas (Fácil, Médio, Desafio).
-
Módulo 1: Lógica Pura
-
Módulo 2: Linguagens
Exercícios: Aula 01 – Introdução ao Regex 📝
Pratique os conceitos fundamentais de busca e identificação de padrões.
🟢 Nível Básico
1. Busca Literal Direta
No Regex101, utilize o texto abaixo:
O aprendizado de Expressões Regulares é um diferencial para o programador moderno.
- Tarefa: Crie um padrão que localize exatamente a palavra "programador".
- Desafio Extra: Quantos matches ocorrem se você buscar apenas por "er"?
2. Identificação de Plataformas
Cite 3 ferramentas ou linguagens de programação que você utiliza no dia a dia que possuem suporte nativo para Regex. Como você acha que o Regex poderia ajudar no uso dessas ferramentas?
🟡 Nível Intermediário
3. Case Sensitivity na Prática
Utilize o texto: Regex, regex, REGEX, ReGeX.
- Tarefa: Crie um padrão literal
regex(minúsculo). - Ação: Ative e desative a flag
i(ignore case) no seu testador. Explique o que acontece com o número de matches em cada estado.
4. Localizando Números Simples
No texto: Em 1970 surgiram as bases do Regex, e em 2024 ele continua essencial.
- Tarefa: Tente encontrar o número "2024" usando apenas caracteres literais. O que acontece se você buscar por "20 24"?
🔴 Nível Desafio
5. O Primeiro Match Contextual
Imagine que você tem um arquivo de log com milhares de linhas como esta:
2024-10-21 14:30:05 - ERROR: Database connection failed.
- Tarefa: Crie um padrão que localize apenas a palavra "ERROR".
- Reflexão: Se o log tivesse a palavra "error" (minúscula), seu padrão funcionaria? Como garantir que ele pegue ambos sem usar flags? (Pense em como os conjuntos
[]poderiam ajudar, mesmo sem tê-los estudado ainda).
Exercícios: Aula 02 – Estrutura Básica 🏗️
Aprofundando em buscas literais e sensibilidade de caixa.
🟢 Nível Básico
1. Buscando Marcas e Nomes
Texto: O iPhone, o iPad e o MacBook são produtos da Apple.
- Tarefa: Localize a palavra
Apple. - Questão: Se você buscar por
apple, o match ocorre? Por que?
2. Espaços e Símbolos
Texto: Preço: R$ 50,00 | Desconto: 10%
- Tarefa: Tente dar match exatamente em
R$ 50,00. - Atenção: Lembre-se que espaços contam como caracteres!
🟡 Nível Intermediário
3. Palavras Combinadas
Texto: O curso de Regex é excelente. Eu amo regex!
- Tarefa: Crie um padrão que encontre as duas ocorrências da palavra "regex", independente de ser maiúscula ou minúscula, utilizando a flag
i.
4. Filtro de Substrings
Texto: casa, casarão, casado, casulo.
- Tarefa: Busque pela palavra literal
casa. - Observação: Quantos matches você obteve? Ele pegou partes de outras palavras ou apenas a palavra isolada? Por que isso acontece no Regex literal?
🔴 Nível Desafio
5. Simulando um Finder
Crie uma lista de 10 nomes de arquivos fictícios (ex: foto.jpg, relatorio.pdf, musica.mp3).
- Tarefa: Crie um Regex literal para encontrar todos os arquivos que terminam em
.jpg. - Reflexão: Como você faria para encontrar arquivos
.JPGe.jpgao mesmo tempo sem usar flags?
Exercícios: Aula 03 – Metacaracteres Fundamentais 🔣
Dominando o ponto, classes de caracteres e o escape.
🟢 Nível Básico
1. Uso do Coringa
Texto: pato, pelo, polo, pulo, p8lo.
- Tarefa: Crie um padrão usando o ponto
.que localize todas essas palavras de 4 letras que começam com 'p' e terminam com 'lo' ou 'to'. - Padrão sugerido:
p.lo(Veja quais ele ignora).
2. Localizando Números
Texto: O código do produto é 948 e o lote é o 002.
- Tarefa: Use o metacaractere
\dpara encontrar todos os dígitos isoladamente. Quantos matches você encontrou no total?
🟡 Nível Intermediário
3. O Desafio do Espaço
Texto: Nome: Ricardo Pires | Idade: 30
- Tarefa: Crie um padrão que utilize
\spara encontrar os espaços entre o nome e o sobrenome, e entre a idade e o número.
4. Alfanuméricos e Underline
Texto: user_01, admin-02, guest_v3.
- Tarefa: Use
\wpara encontrar os caracteres. - Questão: O
\wdeu match no hífen-doadmin-02? Por que?
🔴 Nível Desafio
5. Endereços de IP e o Escape
Texto: O servidor DNS é 8.8.8.8 e o gateway é 192.168.1.1.
- Tarefa: Crie um Regex que localize exatamente o IP
8.8.8.8. - Importante: Se você usar
8.8.8.8sem o escape, seu padrão também encontraria8A8B8C8? Prove isso no Regex101. - Dica: Use
\antes de cada ponto.
Exercícios: Aula 04 – Conjuntos de Caracteres 📦
Praticando com intervalos, colchetes e negação.
🟢 Nível Básico
1. Seleção de Vogais
Texto: As nuvens se movem rapidamente pelo céu azul.
- Tarefa: Crie um padrão que localize todas as vogais (maiúsculas e minúsculas) usando um único conjunto.
2. Intervalos Numéricos
Texto: O preço subiu de 250 para 380 em apenas 5 dias.
- Tarefa: Use o intervalo
[0-9]para destacar todos os números. Existe diferença se você usar\d?
🟡 Nível Intermediário
3. Letras e a Negação
Texto: ID: AB-1234 | Status: OK
- Tarefa: Use a negação
[^a-zA-Z]para encontrar tudo o que NÃO é uma letra. - Reflexão: O que o Regex encontrou? (Espaços, números e símbolos).
4. Intervalos Customizados
Texto: A nota foi A+, a outra foi C e a última foi F-.
- Tarefa: Crie um conjunto que localize apenas as notas de 'A' até 'C'. Ignore 'F'.
🔴 Nível Desafio
5. Filtrando Senhas Simples
Imagine que uma senha deve ter 4 caracteres, onde todos são obrigatoriamente letras minúsculas entre 'a' e 'f', ou números entre '1' e '5'.
- Tarefa: Crie o padrão Regex para validar essa regra (dica: repita o conjunto 4 vezes ou tente adivinhar como simplificar).
- Teste com:
abcd,1234,af15,gh78(estes dois últimos devem falhar).
Exercícios: Aula 05 – Quantificadores 🔢
Praticando a repetição de padrões e o comportamento guloso vs. preguiçoso.
🟢 Nível Básico
1. O Poder do +
Texto: aaaaa bbb c dddddddd
- Tarefa: Use
a+para pegar todos os 'a's de uma vez só em um único match. Faça o mesmo para as outras letras.
2. Opcionais
Texto: O arquivo pode ser foto.jpg ou imagem.jpeg.
- Tarefa: Crie um padrão para capturar a extensão, onde o 'e' de
jpegseja opcional. (Dica: Usejpe?g).
🟡 Nível Intermediário
3. Quantidade Exata
Texto: Código: 123456 | Serial: AB9876
- Tarefa: Use
\d{6}para encontrar apenas o código numérico de 6 dígitos.
4. Intervalos de Repetição
Texto: O nome do usuário deve ter de 3 a 5 letras.
- Tarefa: Crie um padrão que valide palavras compostas apenas por letras (
\wou[a-z]) que tenham entre 3 e 5 caracteres.
🔴 Nível Desafio
5. Fugindo da "Gulodice"
Texto: O link é <a href="http://google.com">Google</a> e o outro é <a href="http://bing.com">Bing</a>.
- Tarefa: Crie um padrão para capturar o conteúdo dentro de
href="...". - Desafio: Tente usar
href=".*"primeiro e veja o erro (ele pegará até o final da linha). Depois, use o quantificador preguiçosohref=".*?"para corrigir.
Exercícios: Aula 06 – Âncoras ⚓
Fixando a posição da busca com início e fim de linha.
🟢 Nível Básico
1. Início de Frase
Texto: Erro: Falha na conexão. Sistema em Erro.
- Tarefa: Crie um padrão que localize a palavra "Erro" apenas se ela estiver no início da frase.
2. Extensões de Arquivos
Texto: indice.html, estilo.css, script.js, backup.html.old
- Tarefa: Use o
$para encontrar apenas os arquivos que terminam exatamente com.html. - Desafio: O seu padrão pegou o
backup.html.old? (Não deveria!).
🟡 Nível Intermediário
3. Validação de Linha Exclusiva
Texto:
- Tarefa: Crie um Regex que aceite apenas linhas que contenham exatamente 5 dígitos (nem mais, nem menos). Use
^e$.
4. Começa e Termina
Texto: A01, B02, C03, A04X
- Tarefa: Localize códigos que começam com 'A' e terminam com um número.
- Dica: Use
^A\d+$(em testes de linha única no Regex101).
🔴 Nível Desafio
5. O Modo Multiline
Texto:
- Tarefa: No Regex101, ative a flag
m(multiline). Crie um padrão que localize apenas as linhas que começam comhttps. - Reflexão: O que muda se você desativar a flag
m?
Exercícios: Aula 07 – Agrupamentos e Captura 🎯
Trabalhando com parênteses, grupos e referências.
🟢 Nível Básico
1. Agrupando Repetições
Texto: ha ha ha haaaaa!
- Tarefa: Use parênteses para agrupar o padrão
(ha )e adicione um quantificador para encontrar as repetições de "ha ".
2. Captura Simples
Texto: Nome: Ricardo | Sobrenome: Pires
- Tarefa: Crie dois grupos de captura: um para o nome e outro para o sobrenome. Verifique no painel do Regex101 se os grupos 1 e 2 contêm os valores corretos.
🟡 Nível Intermediário
3. Extraindo Dados de Logs
Texto: [2024-10-21] INFO: Servidor iniciado.
- Tarefa: Crie um padrão que capture apenas a data dentro dos colchetes em um grupo, e o nível do log (INFO) em outro grupo.
4. Referências Internas (Backreferences)
Texto: O código secreto é 123-123. O outro é 456-789.
- Tarefa: Crie um Regex que identifique padrões onde o número antes do hífen seja igual ao número depois do hífen.
- Dica: Use
(\d{3})-\1.
🔴 Nível Desafio
5. Reorganizando Datas
Texto: 2024-12-25 (Formato AAAA-MM-DD)
- Tarefa: Crie três grupos de captura para Ano, Mês e Dia.
- Desafio: Imagine que você quer transformar isso para o formato brasileiro
DD/MM/AAAA. Como você faria a substituição usando$1,$2e$3? (Apenas descreva ou teste na aba "Substitution" do Regex101).
Exercícios: Aula 08 – Alternância 🔀
Praticando o uso do "OU" e a prioridade de padrões.
🟢 Nível Básico
1. Seleção Simples
Texto: O gato dormiu no tapete, mas o cachorro preferiu o sofá.
- Tarefa: Crie um padrão que localize as palavras "gato" ou "cachorro".
2. Opções de Arquivos
Texto: projeto.html, estilo.css, script.js
- Tarefa: Crie um Regex que identifique se o arquivo tem extensão
.htmlou.js.
🟡 Nível Intermediário
3. Alternância com Agrupamento
Texto: Eu gosto de café. Você gosta de chá?
- Tarefa: Use parênteses para agrupar as opções de bebida:
gosta de (café|chá). - Reflexão: O que acontece se você remover os parênteses e deixar
gosta de café|chá?
4. Prioridade de Match
Texto: super, supercomputador
- Tarefa: Tente dar match em
supercomputador|supere depois emsuper|supercomputador. Como o Regex se comporta no segundo caso ao encontrar a palavra longa?
🔴 Nível Desafio
5. Validando Respostas curtas
Texto: Resposta: Sim, Resposta: Não, Resposta: Talvez
- Tarefa: Crie um padrão que capture apenas o que vem depois de "Resposta: " se for as palavras "Sim" ou "Não". Ignore "Talvez".
- Dica: Use
Resposta:\s(Sim|Não). - Extra: Como você faria para aceitar "S" ou "N" também?
Exercícios: Aula 09 – Modificadores (Flags) 🚩
Aprendendo a controlar o comportamento global do motor Regex.
🟢 Nível Básico
1. Ignorando a Caixa
Texto: Maçã, maçã, MAÇÃ
- Tarefa: Use o padrão
maçãcom a flagipara encontrar todas as variações.
2. Match Global
Texto: um peixe, dois peixes, três peixes
- Tarefa: Busque pela palavra
peixesem a flagge depois com ela. Qual a diferença no número de matches?
🟡 Nível Intermediário
3. Ponto Total (DotAll)
Texto:
- Tarefa: Crie um padrão que tente capturar tudo o que começa em "Início" e termina em "baixo".
- Desafio: Funciona sem a flag
s? Por que o ponto.precisa dela aqui?
4. Multiline vs Global
Texto:
- Tarefa: Use
^#com as flagsgempara encontrar todos os títulos que começam com#. O que acontece se remover a flagm?
🔴 Nível Desafio
5. Combinação Poderosa
Utilize o Regex101.
- Tarefa: Crie um Regex que localize links
httpouhttpsem um texto com várias linhas, ignorando se o protocolo está em maiúscula ou minúscula. - Dica: Use as flags
/gi/.
Exercícios: Aula 10 – Regex com JavaScript 📜
Aplicando Regex no ecossistema Web.
🟢 Nível Básico
1. Validação de Booleano
- Tarefa: Crie um script em JavaScript que use o método
.test()para validar se uma string contém apenas números. - Teste com:
"12345"(true) e"123a45"(false).
2. Busca de Palavras
- Tarefa: Dado o texto
"JavaScript é incrível", use.match()para encontrar a palavra "JavaScript".
🟡 Nível Intermediário
3. Substituição de Padrões
- Tarefa: Use o método
.replace()para mascarar os 4 últimos dígitos de um cartão de crédito:"4555.2222.1111". Transforme em"4555.2222.****". - Dica: Use o quantificador
{4}$.
4. Extração Global
- Tarefa: Extraia todas as palavras que começam com a letra "R" da frase:
"Regex é Rápido, Robusto e Real". Use a flaggi.
🔴 Nível Desafio
5. Validador de Senha
- Tarefa: Crie uma função
validarSenha(senha)que retornetrueapenas se a senha tiver: - No mínimo 8 caracteres.
- Pelo menos um número.
- Pelo menos uma letra maiúscula.
- Dica: Você pode usar múltiplos
.test()ou tentar uma expressão regular avançada única.
Exercícios: Aula 11 – Regex com Python 🐍
Utilizando a biblioteca re para manipulação de dados.
🟢 Nível Básico
1. Busca Simples
- Tarefa: Escreva um código Python que use
re.search()para verificar se a string"Sucesso!"termina com um ponto de exclamação.
2. Listagem de Números
- Tarefa: Dada a string
"Código: 123, ID: 456, Ref: 789", usere.findall()para obter uma lista com apenas os números.
🟡 Nível Intermediário
3. Limpeza de Logs
- Tarefa: Use
re.sub()para remover a data (formatoYYYY-MM-DD) de uma linha de log:"2024-10-21 - Erro no sistema". O resultado deve ser apenas"- Erro no sistema".
4. Grupos de Match
- Tarefa: Use
re.search()com parênteses para capturar separadamente o DDD e o número de um telefone:"(11) 98888-7777". Imprima cada grupo separadamente.
🔴 Nível Desafio
5. Analisador de Caminhos (Paths)
- Tarefa: Crie um script que receba um caminho de arquivo como
"/home/usuario/documentos/foto.png"e use Regex para extrair apenas o nome do arquivo (foto.png) e apenas a extensão (png). - Dica: Use âncoras de fim de linha
$e classes de caracteres negadas.
Exercícios: Aula 12 – Validação de Dados Reais ✅
Praticando a validação de formatos comuns do dia a dia.
🟢 Nível Básico
1. CEP Brasileiro
- Tarefa: Crie um Regex que valide um CEP no formato
00000-000. - Teste com:
04101-000(✅) e04101000(❌).
2. Formato de Data
- Tarefa: Crie um padrão que valide uma data no formato
DD/MM/AAAA. - Dica: Use
\d{2}/\d{2}/\d{4}.
🟡 Nível Intermediário
3. Validação de CPF Flexível
- Tarefa: Crie um Regex que valide um CPF, aceitando tanto o formato com pontos e traço (
123.456.789-00) quanto apenas números (12345678900). - Dica: Use o ponto de interrogação
?para tornar os separadores opcionais.
4. Horário em 24h
- Tarefa: Crie um Regex que valide um horário entre
00:00e23:59. - Dica: O primeiro dígito pode ser
[01]seguido de qualquer número, OU2seguido de[0-3].
🔴 Nível Desafio
5. Validador de E-mail Corporativo
- Tarefa: Crie um Regex que valide apenas e-mails que pertençam ao domínio
@empresa.com.br. - Atenção: Garante que não haja nada antes ou depois do e-mail na linha.
- Teste com:
joao@empresa.com.br(✅),joao@gmail.com(❌),contato@empresa.com.br.suporte(❌).
Exercícios: Aula 13 – Extração de Dados ⛏️
Praticando a captura seletiva de informações em textos complexos.
🟢 Nível Básico
1. Pegando Números de uma String
Texto: O pedido #123 foi faturado por R$ 450.
- Tarefa: Extraia todos os números (separadamente) desse texto.
2. Buscando Menções
Texto: Fale com @ricardo ou @ana sobre o projeto.
- Tarefa: Crie um Regex para extrair todas as menções que começam com
@.
🟡 Nível Intermediário
3. Extraindo apenas o Domínio
Texto: Links úteis: https://google.com, http://github.io, https://regex101.com
- Tarefa: Use um grupo de captura para extrair apenas o domínio (ex:
google.com), sem o protocolohttps://.
4. Localizando IDs de Produtos
Texto: Produtos: [ID:101], [ID:202], [ID:303]
- Tarefa: Extraia apenas os números dos IDs que estão dentro dos colchetes.
🔴 Nível Desafio
5. Crawler de Imagens
Texto: <img src="foto1.jpg"> <img src="banners/logo.png"> <img src="https://site.com/avatar.gif">
- Tarefa: Crie um Regex que extraia apenas o caminho da imagem (o conteúdo dentro de
src="..."). - Desafio Extra: No seu teste, ele deve capturar
foto1.jpg,banners/logo.pnge a URL completa do avatar.
Exercícios: Aula 14 – Limpeza e Transformação 🧼
Praticando a modificação e o tratamento de strings.
🟢 Nível Básico
1. Limpeza de Espaços
Texto: Olá Mundo!
- Tarefa: Crie um Regex que remova todos os espaços em branco do início e do fim dessa string.
2. Substituição Simples
Texto: O custo é de 100 reais e o frete 20 reais.
- Tarefa: Troque todas as ocorrências de "reais" pelo símbolo "R$".
🟡 Nível Intermediário
3. Criando Slugs de URL
Texto: Como aprender Regex rápido
- Tarefa: Transforme esse título em um slug de URL amigável:
como-aprender-regex-rapido. - Passos:
- Transforme espaços em hífens
-. - Converta tudo para minúsculo (via código JS ou Python).
- Transforme espaços em hífens
4. Mudando Formato de Telefone
Texto: 1199998888 (Apenas números)
- Tarefa: Use grupos de captura para transformar esse texto no formato
(11) 9999-8888. - Substituição:
($1) $2-$3.
🔴 Nível Desafio
5. Limpador de Tags XML/HTML
Texto: <div>Conteúdo <b>Importante</b></div>
- Tarefa: Crie um Regex que remova todas as tags HTML e retorne apenas o texto puro:
Conteúdo Importante. - Desafio: Garanta que o Regex funcione com qualquer tag (div, b, p, etc).
Exercícios: Aula 15 – Desempenho e Boas Práticas ⚡
Refatorando expressões para torná-las mais eficientes e seguras.
🟢 Nível Básico
1. Otimizando Alternância
Padrão Original: (segunda|terça|quarta|quinta|sexta)
- Tarefa: Se você não precisar extrair o dia da semana depois, apenas verificar se existe, como você transformaria esse grupo para economizar memória?
2. Substituindo o Coringa
Padrão Original: .* (para encontrar um número de 5 dígitos)
- Tarefa: Reescreva esse padrão para ser mais específico e performático.
🟡 Nível Intermediário
3. Proteção contra Ataques (ReDoS)
Padrão Original: (a+)+c
- Tarefa: Analise por que esse padrão é perigoso em textos que contêm muitos 'a's mas não terminam em 'c'. Como você o recreveria de forma simples para pegar uma sequência de letras 'a' seguida de 'c'?
4. Uso de Âncoras para Velocidade
- Tarefa: Explique por que o padrão
^\d{5}$é processado mais rápido por um motor de busca do que\d{5}em uma string que começa com letras.
🔴 Nível Desafio
5. Auditoria de Validador
Imagine o seguinte Regex para validar um nome de pessoa: ^[a-zA-Z\s]*$
- Questões:
- O que acontece se o usuário enviar uma string vazia? (O
*permite isso). - Como você alteraria para exigir ao menos 2 letras?
- Como você limitaria o tamanho máximo para 50 caracteres para evitar processamento abusivo?
- O que acontece se o usuário enviar uma string vazia? (O
Exercícios: Aula 16 – Revisão Geral e Desafios 🏁
Parabéns por chegar ao fim! Estes exercícios revisam os tópicos mais complexos do curso.
🟢 Nível Básico
1. Busca Localizada
- Tarefa: Crie um Regex que encontre a palavra "Regex" apenas se ela estiver no início da frase.
- Teste com: "Regex é legal" (✅) e "O curso de Regex" (❌).
2. Formato de Versão
- Tarefa: Valide uma versão de software no formato
v1.2.3. - Dica: Use
v\d\.\d\.\d.
🟡 Nível Intermediário
3. Extração de Conteúdo de Tags
Texto: <h1 id="titulo">Bem-vindo ao Curso</h1>
- Tarefa: Use um grupo de captura para extrair apenas o texto "Bem-vindo ao Curso".
- Desafio: Tente extrair também o valor do ID (titulo) em outro grupo.
4. Limpeza de Logins de Usuários
Texto: usuario_01, usuario_02, USER_03, admin
- Tarefa: Use Regex para extrair apenas os usuários que terminam com
_01,_02ou_03.
🔴 Nível Desafio
5. Validador de Senha Completo
- Tarefa: Crie um script (JS ou Python) que valide se uma senha:
- Tem no mínimo 8 caracteres.
- Tem pelo menos uma Letra Maiúscula.
- Tem pelo menos uma Letra Minúscula.
- Tem pelo menos um Número.
- Tem pelo menos um Caractere Especial (
!@#$%*). - Dica: No nível básico, você pode usar 5 Regex separados para validar cada regra!
Projetos
Projeto Final: Automatizador de Auditoria de Dados 🚀
Chegou a hora de provar suas habilidades! Neste projeto, você criará um script de limpeza de dados que transforma um arquivo de logs bagunçado em um relatório estruturado.
📁 O Arquivo de Entrada (dados_brutos.txt)
Imagine que você recebeu os seguintes registros:
USER: ricardo123 | LOGIN: 21-10-2024 10:00 | IP: 192.168.0.1 | STATUS: success
USER: ana_f | LOGIN: 2024/10/21 10:05:30 | IP: 10.0.0.5 | STATUS: error
USER: joao.silva | LOGIN: 21.10.2024 (10:10) | IP: 172.16.254.1 | STATUS: SUCCESS
📋 Objetivos do Projeto
Seu script (Python ou JS) deve usar Regex para:
- Extrair todos os nomes de usuários.
- Normalizar as Datas: Transformar todos os formatos de data (
-,/,.) e remover os parênteses do horário se houver. - Identificar o Status: Contar quantos
SUCCESSe quantosERRORocorreram, ignorando a caixa das letras. - Extrair os IPs: Criar uma lista com todos os endereços IP encontrados.
💡 Dicas de Implementação
- Use
re.findall()em Python para as listas. - Use
re.sub()ou.replace()para as normalizações de data. - Use a flag
ipara o status.
📤 O que deve ser entregue (Simulado)
Um documento ou script que mostre: - O Regex usado para cada item. - O resultado final estruturado.
Exemplo de Resultado Final:
RELATÓRIO DE AUDITORIA
----------------------
Usuários: [ricardo123, ana_f, joao.silva]
Total Sucessos: 2
Total Erros: 1
IPs Bloqueados: [192.168.0.1, 10.0.0.5, 172.16.254.1]
🌟 Desafio Extra
Tente criar um Regex único que separe cada linha em 4 grupos de captura: Usuário, Data, IP e Status.
Boa sorte, mestre do Regex!
Projeto 01 - Identificador de Padrões Iniciais 🔍
O Desafio 🎯
Você precisa criar seu primeiro motor de busca seletiva.
Objetivo: Identificar palavras específicas em um texto literário.
Cenário
A empresa "BuscaFácil" quer filtrar ocorrências de nomes próprios que comecem com a letra 'R'.
Requisitos
- Use o padrão
R\w+. - Teste contra uma lista de nomes:
Ricardo, Ana, Roberto, Sofia, Renan. - Crie um script simples em JS ou Python que filtre esses nomes.
Entrega 📦
- O código do padrão Regex.
- A lista de nomes filtrados.
Projeto 02 - Validador de Códigos de Cupom 🗃️
O Desafio 🎯
Criar um validador para cupons de desconto de uma loja online.
Objetivo: Garantir que o cupom siga a regra da empresa.
Requisitos
- O cupom deve ter 5 letras maiúsculas.
- Seguido por 2 números.
- Exemplo:
DESCO10,BLACK20.
Entrega 📦
- O Regex usado (Dica: Use âncoras e quantificadores).
Projeto 03 - Filtro de Comentários de Código 💬
O Desafio 🎯
Limpar arquivos de código-fonte removendo comentários de linha única.
Objetivo: Reduzir o tamanho do arquivo final.
Requisitos
- Identificar qualquer linha que comece com
//. - O Regex deve capturar a barra e todo o resto da linha.
Entrega 📦
- O padrão Regex e um exemplo de antes/depois.
Projeto 04 - Extrator de Datas de Relatórios 📅
O Desafio 🎯
Você recebeu um PDF convertido para texto e precisa listar todas as datas mencionadas.
Objetivo: Criar um cronograma automático de eventos.
Requisitos
- Capturar datas no formato
DD/MM/AAAA. - Ignorar datas mal formadas.
Entrega 📦
- O script
re.findall()em Python ou.match()em JavaScript.
Projeto 05 - Mascarador de Telefones 📵
O Desafio 🎯
Ocultar parte do número de telefone de clientes para proteger a privacidade.
Objetivo: Transformar (11) 98888-7777 em (11) *****-7777.
Requisitos
- Identificar o bloco central do número.
- Usar grupos de captura.
- Substituir os dígitos centrais por asteriscos.
Entrega 📦
- O padrão de busca e o padrão de substituição.
Projeto 06 - Mineirador de Hashtags 🏷️
O Desafio 🎯
Extrair todas as hashtags de um post de rede social para análise de tendências.
Objetivo: Criar uma lista de tópicos mencionados.
Requisitos
- Capturar palavras que começam com
#. - Ignorar o símbolo
#no resultado final (usar grupos).
Entrega 📦
- A lista de hashtags extraídas de um texto de exemplo.
Projeto 07 - Validador de Senhas Simples 🔑
O Desafio 🎯
Verificar se uma senha atende ao requisito mínimo de conter letras e números.
Objetivo: Implementar a primeira camada de segurança de um site.
Requisitos
- Pelo menos 6 caracteres.
- Conter letras (maiúsculas ou minúsculas) E pelo menos um número.
Entrega 📦
- O Regex (Dica: Use
[a-zA-Z0-9]{6,}).
Projeto 08 - Limpador de Documentos 🧹
O Desafio 🎯
Remover espaços em branco extras de um texto copiado da internet.
Objetivo: Facilitar a leitura e processamento do texto.
Requisitos
- Substituir dois ou mais espaços seguidos por apenas um.
- Remover espaços no início e no fim de cada parágrafo.
Entrega 📦
- O comando de substituição (JS ou Python).
Projeto 09 - Coletor de Links 🔗
O Desafio 🎯
Extrair todas as URLs de uma página HTML de referência.
Objetivo: Criar um índice de referências bibliográficas automático.
Requisitos
- Capturar tudo que começa com
http://ouhttps://. - Capturar até o fim da URL (espaço ou aspas).
Entrega 📦
- A lista de domínios encontrados no texto.
Projeto 10 - Identificador de SKUs 📦
O Desafio 🎯
Validar o código de identificação de mercadorias de um estoque.
Objetivo: Evitar erros de digitação na entrada de dados.
Requisitos
- Formato: 2 letras (Setor) - 3 números (Categoria) - 1 letra (Cor).
- Exemplo:
EL-105-B(Eletrônico, Categoria 105, Cor Blue).
Entrega 📦
- O Regex completo com âncoras.
Projeto 11 - Analisador de Logs 🧾
O Desafio 🎯
Filtrar apenas as linhas de erro de um arquivo de log gigante.
Objetivo: Identificar falhas críticas rapidamente.
Requisitos
- Capturar linhas que contenham
[ERROR]ou[CRITICAL]. - Usar a flag de ignore case
i.
Entrega 📦
- O script
grepou código Python que filtra as linhas.
Projeto 12 - Validador de Cores Hexadecimal 🎨
O Desafio 🎯
Validar códigos de cores usados em arquivos CSS.
Objetivo: Garantir que as cores sigam o padrão web.
Requisitos
- Começar com
#. - Ter exatamente 3 ou 6 caracteres alfanuméricos (0-9, A-F).
- Exemplo:
#FFF,#000000, #A1B2C3`.
Entrega 📦
- O Regex (Dica: Use agrupamento e alternância).
Projeto 13 - Reorganizador de Nomes 👤
O Desafio 🎯
Transformar uma lista de nomes em formato acadêmico para formato simples.
Objetivo: Pires, Ricardo -> Ricardo Pires.
Requisitos
- Capturar Sobrenome e Nome separadamente.
- Usar grupos de captura.
- Inverter a ordem na substituição.
Entrega 📦
- O padrão de busca e o padrão de substituição.
Projeto 14 - Extrator de Preços 💰
O Desafio 🎯
Extrair todos os valores em reais de um texto publicitário.
Objetivo: Gerar uma tabela comparativa de preços.
Requisitos
- Capturar o padrão
R$ 0,00. - Lidar com pontos de milhar (opcional).
Entrega 📦
- O script
re.findall()e a lista de valores extraídos.
Projeto 15 - Validador de IP (Básico) 🌐
O Desafio 🎯
Verificar se um endereço IP (v4) tem o formato correto.
Objetivo: Validar conexões de rede em um sistema de segurança.
Requisitos
- 4 blocos de números separados por pontos.
- Exemplo:
192.168.1.1.
Entrega 📦
- O Regex (Dica:
\d{1,3}(\.\d{1,3}){3}).
Projeto 16 - Sanitizador Universal de Dados (Final) 🏆
O Desafio 🎯
Você é o mestre do Regex agora! Sua tarefa final é criar um script completo que processe uma massa de dados brutos e os transforme em um relatório limpo.
Objetivo: Aplicar todos os conceitos do curso (Metacaracteres, Grupos, Âncoras, Flags).
Cenário
Limpe os logs de acesso de um servidor que estão no formato:
Data: 2024-10-21 | User: admin | IP: 127.0.0.1 | Msg: Login Successful
Requisitos Finais
- Normalizar Datas: Para
21/10/2024. - Extrair Usuários: Criar uma lista única.
- Filtrar Sucessos: Identificar apenas logins bem-sucedidos.
- Limpeza Geral: Remover qualquer caractere especial nos nomes.
Entrega 📦
- O código fonte completo (Python ou JS).
- Uma breve explicação de cada Regex utilizado.
Quizzes
Quizzes Interativos 🧠
Teste seus conhecimentos rapidamente.
-
Módulo 1: Fundamentos
-
Módulo 2: O Poliglota
Quiz 01 - Introdução
Quiz 02 - Introdução
Quiz 03 - Introdução
Quiz 04 - Introdução
Quiz 05 - Introdução
Quiz 06 - Introdução
Quiz 07 - Introdução
Quiz 08 - Introdução
Quiz 09 - Introdução
Quiz 10 - Introdução
Quiz 11 - Introdução
Quiz 12 - Introdução
Quiz 13 - Introdução
Quiz 14 - Introdução
Quiz 15 - Introdução
Quiz 16 - Introdução
Slides
Visão Geral dos Slides 📽️
Materiais de apoio visual para acompanhamento das aulas do curso de Regex.
-
Módulo 1: A Lógica do Padrão
-
Módulo 2: Domínio e Aplicações
Aula 01 - Lógica de Programação 🧠
Agenda 📅
- O que é Lógica?
- O Algoritmo
- Pensamento Computacional
- Fluxogramas
- Ferramentas (VisualG)
1. O que é Lógica? 🧠
"A arte de pensar corretamente."
- Organização de ideias.
- Maneira rigorosa de raciocinar.
- Não é apenas para computadores!
- Usamos no dia a dia sem perceber.
Lógica no Dia a Dia ☀️
- Se chover, levo guarda-chuva.
- Se estiver sol, vou à praia.
- Se o pneu furar, troco o pneu.
- Causa -> Efeito.
O Computador é BURRO 🤖
- Ele não "pensa".
- Ele apenas obedece.
- Se você explicar errado, ele fará errado.
- Programar = Ensinar o computador.
2. O Algoritmo 💡
- Definição: Sequência de passos finitos e precisos para resolver um problema.
- Palavras-chave:
- Sequência: A ordem importa.
- Finitos: Tem que acabar.
- Precisos: Sem "talvez".
Receita de Bolo 🍰
- Quebrar ovos.
- Misturar farinha.
- Assar por 40min.
- Comer.
Se você "Comer" antes de "Assar", vai dar dor de barriga! (Ordem importa)
Estrutura Básica 🏗️
Todo algoritmo tem 3 fases:
- Entrada (Ingredientes).
- Processamento (Misturar/Assar).
- Saída (Bolo pronto).
3. Pensamento Computacional 🧩
Os 4 Superpoderes para resolver problemas complexos.
- Decomposição
- Reconhecimento de Padrões
- Abstração
- Algoritmo
3.1 Decomposição 🧱
- Quebrar um problema grande em menores.
- Exemplo: Construir uma Casa.
- Fazer fundação.
- Levantar paredes.
- Colocar telhado.
3.2 Reconhecimento de Padrões 🔍
- Identificar o que já vimos antes.
- Exemplo:
- Dirigir Carro 🚗
- Dirigir Caminhão 🚛
- Padrão: Volante, Pedais, Câmbio.
3.3 Abstração 🌫️
- Focar no essencial.
- Ignorar detalhes irrelevantes.
- Exemplo: "Trocar o pneu".
- Importa: Chave de roda, Macaco.
- Não importa: Marca da borracha, cor do aro.
3.4 Algoritmo (Design) 📝
- Escrever o passo a passo final.
- Juntar tudo o que foi planejado.
- O plano de execução.
4. Fluxogramas 🗺️
A linguagem universal dos programadores.
- Desenho > Texto.
- Padronizado mundialmente.
Símbolos Principais
| Forma | Nome | Função |
|---|---|---|
([ ... ]) |
Terminador | Início/Fim |
[ ... ] |
Processo | Ação/Cálculo |
/ ... / |
Dados | Entrada/Saída |
{ ... } |
Decisão | Pergunta (Sim/Não) |
Exemplo: Lâmpada 💡
graph TD;
A([Início]) --> B{Lâmpada acende?};
B -- Não --> C{Plugada?};
C -- Não --> D[Plugar];
C -- Sim --> E[Trocar Bulbo];
B -- Sim --> F([Fim]);
D --> F;
E --> F;
5. VisualG e Portugol 💻
- Portugol: "Português Estruturado".
- Uma linguagem feita para aprender.
- Comandos em português.
- Foco na lógica, não na sintaxe complexa (ainda).
Ferramenta: VisualG
- Gratuito.
- Leve.
- Roda direto no Windows.
- Mostra a memória do computador.
Primeiro Código (Preview)
Veremos isso na prática na próxima aula!
Vamos Praticar? 📝
Desafio do Lobo/Ovelha/Alface
- Um barqueiro.
- Lobo come Ovelha.
- Ovelha come Alface.
- Barco só leva 1 passageiro extra.
- Como atravessar todos?
Solução (Algoritmo)
- Leva Ovelha. Voltou Vazio.
- Leva Lobo. Traz Ovelha.
- Deixa Ovelha. Leva Alface. Voltou Vazio.
- Leva Ovelha.
- FIM.
Resumo ✅
- Lógica = Pensar certo.
- Algoritmo = Sequência de passos.
- 3 Fases: Entrada, Processamento, Saída.
- Fluxogramas ajudam a desenhar a solução.
Próxima Aula 🚀
- Configurar o VisualG.
- Entender Variáveis (As caixas da memória).
- Tipos de Dados (Texto, Número, Lógico).
👉 Instalem o VisualG!
Aula 02 - Ambiente e Ferramentas 🛠️
Agenda 📅
- O Ciclo de Vida do Código
- Ferramentas de Aprendizado (Low Code)
- Visual Studio Code (A Ferramenta Real)
- O Terminal (Sem Medo!)
- Instalação e Configuração
1. O Ciclo de Vida do Código 🔄
Como o computador entende o que escrevemos?
- Nós: Falamos Inglês/Português (Texto).
- Computador: Fala Energia (0 e 1).
- O Problema: Tradução.
As 3 Etapas 🚦
- Código Fonte: O texto que você digita.
- Compilação/Interpretação: A tradução mágica.
- Execução (Binário): O programa rodando.
Visualizando o Processo
graph LR;
A["Código Fonte\n(Humano)"] -->|Compilador| B["Binário\n(Máquina)"];
B -->|CPU| C["Execução\n(Ação)"];
style A fill:#f9f;
style B fill:#bbf;
style C fill:#bfb;
Código Fonte 📝
- Arquivos de texto simples (
.alg,.py,.c,.java). - Legível para humanos.
- Exemplo:
Compilador ⚙️
- O "Tradutor".
- Verifica se você escreveu certo (Sintaxe).
- Transforma em linguagem de máquina.
- Se tiver erro, ele GRITA (Erro de Compilação).
Binário / Executável 🚀
- O resultado final.
.exe(Windows), App Mobile.- O usuário final só vê isso.
- Não dá para ler (só números e símbolos estranhos).
2. Ferramentas Low Code 🧩
Para começar sem frustração.
- Foco na Lógica.
- Esqueça "ponto-e-vírgula" por enquanto.
- VisualG e Scratch.
VisualG 🟦
- Linguagem: Portugol (Português Estruturado).
- Interface: Simples, leve.
- Diferencial: Mostra o valor das variáveis em tempo real (Memória).
- Uso: Exclusivo para ensino no Brasil.
Exemplo VisualG
Algoritmo "Exemplo"
Var
nome : caractere
Inicio
escreva("Qual seu nome? ")
leia(nome)
escreva("Olá, ", nome)
Fimalgoritmo
Parece português, funciona como código.
Scratch 🐱
- Criado pelo MIT.
- Programação em Blocos (Lego).
- Impossível errar sintaxe (os blocos só encaixam se estiver certo).
- Ótimo para entender loops e eventos.
3. Visual Studio Code (VS Code) 💻
A ferramenta profissional.
- Gratuito (Microsoft).
- Leve.
- Extensível.
Por que VS Code? 🌟
- IntelliSense: Autocomplete inteligente.
- Multi-Linguagem: Python, Java, C++, HTML... tudo num lugar só.
- Terminal Integrado: Não precisa abrir janelas extras.
- Comunidade: Milhares de plugins.
Extensões Essenciais 🧩
Sem elas, ele é apenas um bloco de notas.
- Portuguese (Brazil): Traduz o menu.
- Material Icon Theme: Ícones bonitos para arquivos.
- Code Runner: Roda código com um clique.
- Live Server: Para Web (HTML).
4. O Terminal (Tela Preta) 🖥️
Não tenha medo da tela preta!
- É o modo "Hacker" (mas simples).
- Controle total do sistema.
- Mais rápido que clicar com o mouse.
Comandos Básicos (Windows/Linux)
| Comando | Função | Exemplo |
|---|---|---|
cd |
Change Directory (Mudar Pasta) | cd projetos |
ls ou dir |
List (Listar arquivos) | ls |
mkdir |
Make Directory (Criar Pasta) | mkdir aula01 |
clear ou cls |
Clear Screen (Limpar) | cls |
5. Prática: Olá Mundo 🌍
Vamos criar nosso primeiro programa no VisualG.
- Abra o VisualG.
- No bloco
Inicio, digite: - Aperte F9 (Executar).
Onde Configurar? 🛠️
Preparamos guias passo a passo para você instalar tudo.
- Setup 01 - VisualG (Comece aqui!)
- Setup 03 - VS Code (Para depois)
Resumo ✅
- Código Fonte -> Compilador -> Binário.
- VisualG = Treino de Lógica.
- VS Code = ferramenta Profissional.
- Terminal = Poder e Velocidade.
Próxima Aula 🚀
- Entrar na "Mente do Computador".
- Variáveis: Como o computador guarda informações?
- Tipos de Dados: Texto, Número Inteiro, Número Real, Lógico.
👉 Tarefa de Casa: Instalar VisualG e rodar o "Olá Mundo".
Aula 03 - Estrutura Sequencial ➡️
Agenda 📅
- Variáveis (Revisão)
- Tipos de Dados
- Entrada e Saída
- Operadores Aritméticos
- Atribuição
1. Variáveis: Caixas da Memória 📦
- Computador tem memória (RAM).
- Variável: Um pedaço nomeado dessa memória.
- Guardam um valor por vez.
Visualização 🧪
graph TD;
Memoria[RAM] --> Var1[Gaveta 'IDADE'];
Var1 --> Val1[Valor: 25];
Memoria --> Var2[Gaveta 'NOME'];
Var2 --> Val2["Valor: 'Maria'"];
2. Tipos de Dados 📐
Nem tudo cabe na mesma caixa.
- Inteiro: Números sem vírgula (10, -5).
- Real: Números com vírgula (10.5, 3.14).
- Caractere: Texto ("Olá", "A").
- Lógico: Verdadeiro ou Falso.
Erro Comum ❌
Tentar colocar texto numa caixa de número.
3. Entrada e Saída ⚙️
Como o programa fala com o usuário?
- Entrada: Dados que entram (Teclado).
- Saída: Dados que saem (Tela).
Comando: ESCREVA (Saída) 📤
- Mostra texto na tela.
escreva(na mesma linha).escreval(pula linha).
Comando: LEIA (Entrada) 📥
- Pára o programa e espera o usuário digitar.
- Guarda o que foi digitado numa variável.
4. Atribuição (<-) ⬅️
- Colocar um valor dentro da variável.
- Lê-se: "Recebe".
- A seta sempre aponta para a esquerda (para a variável).
5. Operadores Aritméticos 🧮
O computador é uma calculadora gigante.
| Operador | Nome | Exemplo |
|---|---|---|
+ |
Soma | 5 + 3 |
- |
Subtração | 10 - 2 |
* |
Multiplicação | 4 * 3 |
/ |
Divisão | 20 / 4 |
Operadores Especiais ✨
- Módulo (
%): Resto da divisão.5 % 2 = 1(Sobrou 1).- Útil para saber se é Par ou Ímpar.
- Potência (
^): Elevar ao quadrado/cubo.2 ^ 3 = 8.
Ordem de Precedência 🥇
Matemática básica!
- Parênteses
( ) - Potência
^ - Multiplicação e Divisão
* / - Soma e Subtração
+ -
2 + 3 * 4= 14 (Não 20!)
Exemplo Completo: Dobro do Número 🔢
Vamos criar um programa que lê um número e mostra o dobro.
Passo 1: Definir Variáveis
Passo 2: Entrada
Passo 3: Processamento
Passo 4: Saída
Exercício Rápido ⚡
Faça no VisualG agora: 1. Leia dois números. 2. Some os dois. 3. Mostre o resultado.
Resumo ✅
- Variáveis: Nome, Tipo e Valor.
- Tipos: Inteiro, Real, Caractere, Lógico.
- Entrada:
leia(). - Saída:
escreva(). - Atribuição:
<-.
Próxima Aula 🚀
- E se precisarmos tomar decisões?
- O comando
SE. - Estruturas Condicionais.
👉 Tarefa: Terminar os exercícios da lista 03!
Aula 04 - Estrutura Condicional 🔀
Agenda 📅
- O Desvio Lógico ("Se...")
- Operadores Relacionais
- Estrutura Se-Entao-Senao
- Operadores Lógicos (E, OU, NÃO)
- Estrutura Escolha-Caso
1. O Desvio Lógico 🤔
Até agora, nossos programas eram uma linha reta. Mas a vida é feita de escolhas.
- Se chover, pego guarda-chuva.
- Senão, vou de bicicleta.
Visualizando a Decisão
graph TD;
Inicio([Início]) --> Pergunta{Está Sol?};
Pergunta -- Sim --> A[Praia];
Pergunta -- Não --> B[Netflix];
A --> Fim([Fim]);
B --> Fim;
2. Operadores Relacionais 📏
Para o computador decidir, ele precisa comparar. A resposta é sempre Verdadeiro ou Falso.
Os Comparadores
| Símbolo | Significado | Exemplo | Resultado |
|---|---|---|---|
> |
Maior que | 10 > 5 |
V |
< |
Menor que | 3 < 8 |
V |
== |
Igual a | 5 == 5 |
V |
!= |
Diferente | 5 != 3 |
V |
>= |
Maior/Igual | 10 >= 10 |
V |
3. Sintaxe Básica (Se-Entao) 📝
- Se a condição for Verdadeira, ele executa o bloco.
- Se for Falsa, ele pula.
O "Senao" (O Plano B)
E se for Falso? Usamos o senao.
4. Operadores Lógicos 🔗
Às vezes, uma condição só não basta.
- Quero ir à praia SE tiver sol E for sábado.
Operador E (AND) 🤝
- Exige que TODAS as condições sejam verdadeiras.
| A | B | A e B |
|---|---|---|
| V | V | V |
| V | F | F |
| F | V | F |
| F | F | F |
Operador OU (OR) 🤷
- Exige que PELO MENOS UM seja verdadeiro.
| A | B | A ou B |
|---|---|---|
| V | V | V |
| V | F | V |
| F | V | V |
| F | F | F |
Operador NÃO (NOT) 🚫
- Inverte o resultado.
| A | NÃO A |
|---|---|
| V | F |
| F | V |
Exemplo Prático: Média Escolar 🎓
Vamos melhorar nosso cálculo de média.
- Media >= 7: Aprovado.
- Media >= 5 E Media < 7: Recuperação.
- Media < 5: Reprovado.
O Código (Aninhado)
se (media >= 7) entao
escreval("Aprovado")
senao
se (media >= 5) entao
escreval("Recuperação")
senao
escreval("Reprovado")
fimse
fimse
5. Estrutura Escolha-Caso 🚦
Quando temos muitas opções fixas (como um Menu).
Evita aquele monte de se-senao-se-senao.
Exemplo: Menu
escolha (opcao)
caso 1
escreva("Iniciar Jogo")
caso 2
escreva("Configurações")
caso 3
escreva("Sair")
outrocaso
escreva("Opção Inválida")
fimescolha
Quando usar qual? 🤔
- SE: Para testar intervalos (
idade > 18), condições complexas (E,OU). - ESCOLHA: Para valores exatos (Menus, Códigos de produto).
Exercício Rápido ⚡
Par ou Ímpar?
- Leia um número.
- Verifique se o resto da divisão por 2 é zero.
- Se for, é Par.
- Senão, é Ímpar.
Resumo ✅
- Se/Então/Senão: Tomada de decisão.
- Relacionais:
>,<,=,!=. - Lógicos:
E,OU,NÃO. - Escolha: Ótimo para menus.
Próxima Aula 🚀
- E se eu quiser repetir um comando 1000 vezes?
- Loops (Laços de Repetição).
Enquanto,Para,Repita.
👉 Tarefa: Fazer o exercício do Bhaskara!
Aula 05 - Estruturas Repetitivas 🔁
Agenda 📅
- O Poder da Repetição (Loops)
- Estrutura Enquanto (While)
- Estrutura Repita (Do-While)
- Estrutura Para (For)
- Controle de Fluxo (Interrompa)
- Teste de Mesa
1. O Poder da Repetição 🔄
Imagine escrever "Eu não vou jogar bolinha de papel" 100 vezes no quadro.
- Humano: Cansa, erra, demora.
- Computador: Faz em 1 milissegundo.
O Loop (Laço) ♾️
- Executa um bloco de código enquanto uma condição for verdadeira.
- Automatiza tarefas repetitivas.
- Economiza linhas de código.
Visualizando um Loop
graph TD;
Inicio([Início]) --> Cond{Contador < 5?};
Cond -- Sim --> Acao["Escrever 'Olá'"];
Acao --> Inc[Contador + 1];
Inc --> Cond;
Cond -- Não --> Fim([Fim]);
2. Enquanto (While) ⏳
- O mais comum.
- Testa a condição ANTES de entrar.
- Se a condição for falsa de cara, ele nunca executa.
Sintaxe
Exemplo: Contagem
Se esquecer o
i <- i + 1, vira um Loop Infinito! 😱
3. Repita-Até (Do-While) 🛡️
- Testa a condição no FINAL.
- Executa pelo menos uma vez.
- Ótimo para menus ou validação.
Sintaxe
Atenção: No VisualG/Portugol, ele repete até a condição ser verdadeira (ou seja, enquanto for falsa). Em outras linguagens (C, Java), é enquanto for verdadeira.
Exemplo: Senha Correta 🔒
4. Para (For) 🎯
- Quando sabemos exatamente quantas vezes repetir.
- Agrupa tudo numa linha só:
- Início (Onde começa)
- Fim (Onde termina)
- Passo (De quanto em quanto)
Sintaxe
- i: Variável contadora.
- 1: Valor inicial.
- 10: Valor final.
- 1: Incremento.
Exemplo: Contagem Regressiva 🚀
5. Controle de Fluxo (Interrompa) 🛑
- Sai do loop imediatamente.
- Útil para parar buscas ou sair de menus.
6. O Teste de Mesa 🧠
Como debugar mentalmente?
- Crie uma tabela com as variáveis.
- Simule linha por linha.
- Anote as mudanças.
| Passo | i | Saída |
|---|---|---|
| 1 | 0 | - |
| 2 | 0 | "0" |
| 3 | 1 | - |
| ... | ... | ... |
Comparativo ⚖️
| Estrutura | Quando usar? |
|---|---|
| Enquanto | Não sei quantas vezes vai repetir. |
| Repita | Tenho que executar pelo menos 1 vez. |
| Para | Sei exatamente o número de repetições. |
Exercício Rápido ⚡
Tabuada do 7
- Use um
para. - De 1 até 10.
- Mostre
7 x i = resultado.
Resumo ✅
- Loops economizam tempo.
- Cuidado com Loops Infinitos.
- Escolha a estrutura certa para o problema.
Próxima Aula 🚀
- E para guardar 50 notas de alunos?
- Criar 50 variáveis?
n1, n2, n3...? 😫 - Vetores (Arrays): A solução elegante.
👉 Tarefa: Fazer a Tabuada e o Primo!
Aula 06 - Estruturas de Dados I: Vetores 📊
Agenda 📅
- O Problema das Muitas Variáveis
- O Que é um Vetor?
- Simulando a Memória
- Declarando e Acessando
- Percorrendo Vetores (Loop Para)
- Ordenação (Bubble Sort)
1. O Problema 😫
Imagine guardar a nota de 50 alunos.
nota1,nota2,nota3...nota50.- E para calcular a média?
(nota1 + nota2 + ... + nota50) / 50
- Caos Total! Código gigante e difícil de manter.
2. A Solução: Vetores (Arrays) 📏
- Uma variável "comprida".
- Guarda muitos valores do mesmo tipo.
- Cada valor tem um endereço (Índice).
- Como uma planilha do Excel de uma linha só.
Visualizando a Memória
graph LR;
subgraph Vetor NOTAS
direction LR
A[Indice 0\nValor: 8.5] --- B[Indice 1\nValor: 7.0] --- C[Indice 2\nValor: 10.0] --- D[Indice 3\nValor: 5.5];
end
style A fill:#f9f;
style B fill:#bbf;
Índice (Index) 🔢
- É o endereço da gaveta.
- Começa no 0 (na maioria das linguagens).
notas[0]é a primeira nota.notas[49]é a 50ª nota.
3. Declarando um Vetor 📝
No VisualG/Portugol:
Var
// Um vetor de 5 posições (0 a 4)
notas : vetor [0..4] de real
nomes : vetor [0..9] de caractere
4. Acessando Dados 🗝️
Como ler e escrever numa posição específica?
Escrevendo (Guardando)
Lendo (Mostrando)
5. A Combinação Perfeita: Vetor + Para 🤝
Se temos índices sequenciais (0, 1, 2...), usamos um Loop Para para percorrer.
Preenchendo Automaticamente
Muito melhor do que 5
leiaseparados!
Mostrando Tudo
Somando Valores ➕
Como somar todas as notas? Usamos um Acumulador.
6. Ordenação (Bubble Sort) 🫧
E se quisermos colocar em ordem crescente? Existem algoritmos famosos para isso. O mais simples é o Bolha.
- Ideia: O maior valor "flutua" para o final.
- Compara pares de vizinhos.
O Algoritmo da Troca 🔄
Se o vizinho da esquerda for maior que o da direita, TROQUE.
Exemplo Visual 🛁
Vetor: [5, 1, 4]
- Compara 5 e 1. 5 > 1? Sim. Troca. ->
[1, 5, 4] - Compara 5 e 4. 5 > 4? Sim. Troca. ->
[1, 4, 5] - Pronto! O 5 (maior) foi pro final.
7. Erros Comuns ⚠️
- Estourar o Vetor:
- Tentar acessar
notas[5]num vetor de 0..4. - O programa trava (Index Out Of Bounds).
- Tentar acessar
- Confundir Índice com Valor:
ié a posição.vet[i]é o valor naquela posição.
Exercício Rápido ⚡
Invertendo a Ordem
- Leia 5 nomes.
- Guarde num vetor.
- Mostre do último para o primeiro.
- Dica:
para i de 4 ate 0 passo -1.
- Dica:
Resumo ✅
- Vetor = Variável composta.
- Índice começa em 0.
- Loop
Paraé o melhor amigo do Vetor. - Ordenação organiza os dados.
Próxima Aula 🚀
- E se precisarmos de linhas E colunas?
- Planilhas, Tabuleiros, Jogos.
- Matrizes (Vetores Bidimensionais).
👉 Tarefa: Fazer o exercício "Rei da Montanha" (Achar o maior valor)!
Aula 07 - Estruturas de Dados II: Matrizes 📈
Agenda 📅
- O Mundo em 2D
- O Que é uma Matriz?
- Coordenadas (Linha x Coluna)
- Percorrendo Matrizes
- Aplicações Práticas
1. O Mundo em 2D 🗺️
Nem tudo cabe numa lista (Vetor).
- Uma sala de cinema.
- Um tabuleiro de xadrez.
- Uma planilha do Excel.
- Precisamos de 2 Dimensões: Altura e Largura.
2. O Que é uma Matriz? 🏗️
- É um "Vetor de Vetores".
- Tem Linhas (Horizontais) e Colunas (Verticais).
- Cada "casinha" tem um endereço duplo.
Visualizando uma Matriz
graph TD;
subgraph Matriz [3x3]
direction TB
L0[Linha 0] --- C00[0,0] --- C01[0,1] --- C02[0,2]
L1[Linha 1] --- C10[1,0] --- C11[1,1] --- C12[1,2]
L2[Linha 2] --- C20[2,0] --- C21[2,1] --- C22[2,2]
end
3. Coordenadas (Linha, Coluna) 📍
Assim como na Batalha Naval: B4, A1.
Na programação, usamos índices numéricos.
matriz[LINHA][COLUNA]- Sempre LINHA primeiro, depois COLUNA.
Sintaxe VisualG
Var
// 3 Linhas, 3 Colunas
tabuleiro : vetor [0..2, 0..2] de inteiro
Inicio
// Colocando valor no centro
tabuleiro[1][1] <- 5
// Canto superior esquerdo
tabuleiro[0][0] <- 1
4. Percorrendo uma Matriz 🔄🔄
Se um vetor precisa de 1 loop, a matriz precisa de 2 Loops Aninhados.
- O primeiro trava a Linha.
- O segundo percorre todas as Colunas daquela linha.
O Código Padrão
para i de 0 ate 2 faca // Linhas
para j de 0 ate 2 faca // Colunas
escreva("Posição [", i, ",", j, "]: ")
leia(matriz[i][j])
fimpara
fimpara
Visualizando a Execução
i=0, j=0-> [0,0]i=0, j=1-> [0,1]i=0, j=2-> [0,2] -> Fim das Colunas.i=1, j=0-> [1,0] -> Nova Linha!
5. Matriz Identidade 🆔
Um clássico da matemática. Diagonal Principal = 1. Resto = 0.
- A Diagonal Principal acontece quando
i == j(0,0; 1,1; 2,2).
6. Aplicações Reais 🌍
Onde usamos isso?
- Imagens: Cada pixel é uma célula com cor (RGB).
- Jogos: O mapa do jogo (Tilemap).
- Gráficos 3D: Matrizes de transformação.
Exercício Rápido ⚡
Soma Total
- Crie uma matriz 2x2.
- Preencha com números.
- Use dois loops para somar TUDO.
- Mostre o total.
Resumo ✅
- Matriz = Linhas x Colunas.
- Declaração:
vetor [L..L, C..C]. - Acesso:
mat[linha][coluna]. - Percorrer: 2 loops
Para.
Próxima Aula 🚀
- Nossos códigos estão ficando grandes...
- Como organizar?
- Modularização: Dividir para Conquistar.
- Funções e Procedimentos.
👉 Tarefa: Jogue Batalha Naval (no papel ou no código)!
Aula 08 - Modularização 🧩
Agenda 📅
- Conceito de Módulos (Divide & Conquer)
- Procedimentos vs Funções
- Escopo de Variáveis (Locais x Globais)
- Parâmetros (Valor x Referência)
- Exemplos Práticos
1. Dividir para Conquistar ⚔️
Imagine construir um carro inteiro num bloco só. Impossível! Nós montamos: - Motor 🔧 - Rodas 🚗 - Vidros 🪟 E depois juntamos.
Na Programação
- Não escreva 1000 linhas no
Inicio. - Quebre em pequenos blocos (Módulos).
- Cada módulo resolve um problema específico.
Visualizando (Mermaid)
sequenceDiagram
participant Principal
participant Soma
Principal->>Soma: Envia (5, 3)
Note right of Soma: Calcula 5+3
Soma-->>Principal: Retorna 8
Principal->>Principal: Mostra 8
2. Tipos de Módulos 🛠️
Em Portugol, temos dois tipos principais.
- Procedimentos: Fazem uma ação, mas não devolvem valor matemático.
- Funções: Calculam e RETORNAM um valor.
Procedimento (Ação)
Ex: LimparTela(), MostrarMenu(), TocarSom().
Chamada:
saudacao("João")
Função (Cálculo)
Ex: Raiz(x), Soma(a,b), Media(n1,n2).
Tem a palavra mágica RETORNE.
Chamada:
res <- somar(2, 3)
3. Escopo de Variáveis 🏠
Onde minha variável vive?
- Global: Criada fora de tudo. Todo mundo vê. (Perigoso!).
- Local: Criada dentro da função. Só a função vê. (Seguro!).
O Muro das Funções 🧱
Se eu crio x dentro de somar, o Principal não sabe quem é x.
Isso evita confusão!
4. Parâmetros 🚚
Como passar dados para a função?
- Por Valor (O padrão): Envia uma CÓPIA. Se a função mudar, o original não muda.
- Por Referência (
var): Envia o ENDEREÇO. Se a função mudar, o original MUDA!
Exemplo: Troca de Valores
Precisa ser por Referência!
5. Vantagens da Modularização ✅
- Reutilização: Escreve uma vez, usa 1000 vezes.
- Organização: Código limpo.
- Facilidade de Manutenção: Se o cálculo mudar, corrijo num lugar só.
Projeto Final Módulo 1 🏆
Sistema de Notas Completo
- Use Vetores.
- Use Matrizes (se quiser).
- Use Funções para calcular média.
- Use Procedimentos para mostrar boletim.
Resumo ✅
- Modularizar = Organizar.
- Função retorna valor. Procedimento faz ação.
- Variáveis Locais são protegidas.
- Use parâmetros para comunicar.
Próxima Aula 🚀
- Fim da "Lógica Pura"!
- Vamos conhecer linguagens reais.
- C e C++: Os pais da programação moderna.
- Gerenciamento de Memória na unha!
👉 Tarefa: Refatore seus códigos antigos usando Funções!
Aula 09 - C e C++: Baixo Nível 🧱
Agenda 📅
- História e Importância
- Anatomia de um Programa C
- Compilação
- Gerenciamento de Memória (Stack vs Heap)
- Ponteiros
- Introdução ao C++ (OOP)
1. O Pai das Linguagens 👴
- C (1972): Dennis Ritchie (Bell Labs).
- Base de Tudo: Windows, Linux, Mac, Android, iOS.
- Filosofia: "Confie no programador" (mesmo se ele fizer besteira).
Por que aprender C hoje? 🧐
- Entender como a máquina funciona de verdade.
- Gerenciar memória manualmente.
- Performance extrema (Jogos, Sistemas Embarcados).
2. Anatomia Básica 🦴
Desmontando o Código 🔧
#include <stdio.h>: Importa biblioteca de IO (Entrada/Saída).int main(): A função principal. Todo programa começa aqui.printf(...): Imprime formatado.return 0;: Retorna "Sucesso" para o Sistema Operacional.
O Ponto e Vírgula ;
- Em C/C++, ele é OBRIGATÓRIO.
- O compilador não adivinha onde a linha termina.
- Esquecer
;é o erro nº 1 de iniciantes.
3. O Processo de Compilação ⚙️
C é uma linguagem Compilada.
- Código Fonte (
.c): Texto legível. - Compilador (
gcc): Traduz para Assembly/Machine Code. - Linker: Junta com bibliotecas.
- Executável (
.exe): Programa final.
4. Memória: Stack vs Heap 🧠
Onde seus dados moram?
Visualizando a Memória
graph TD;
subgraph RAM
Stack["Stack (Pilha)"] --- V["Locais\nAutomáticas\nRápidas"];
Heap["Heap (Monte)"] --- D["Dinâmicas\nManuais\nLentas"];
end
style Stack fill:#f9f;
style Heap fill:#bbf;
Stack (Pilha) 🥞
- Variáveis normais:
int idade = 20; - Criada e destruída automaticamente.
- Tamanho fixo e pequeno.
Heap (Monte) 🏔️
- Memória dinâmica:
malloc()ounew. - Você pede memória ao sistema.
- Cuidado: Você precisa devolver (
freeoudelete), senão vaza memória (Memory Leak)!
5. Ponteiros: O Superpoder ⚡
Um ponteiro não guarda o valor. Guarda o ENDEREÇO.
int x = 10;(Valor 10)int *p = &x;(Endereço onde o 10 mora, ex:0x7ffee4)
Para que serve? 🤷
- Modificar variáveis originais dentro de funções.
- Alocar memória dinâmica.
- Criar estruturas complexas (Listas, Árvores).
"Com grandes poderes vêm grandes responsabilidades." (E Segmentation Faults).
6. Introdução ao C++ 🚀
C++ = C + Classes (OOP).
- Mantém a performance do C.
- Adiciona organização de objetos.
- Base para Jogos (Unreal) e Softwares Pesados (Chrome, Photoshop).
Exemplo C++ 🚗
#include <iostream>
using namespace std;
class Carro {
public:
void buzinar() {
cout << "Bi Bi!" << endl;
}
};
int main() {
Carro meuCarro;
meuCarro.buzinar();
return 0;
}
Diferenças C vs C++
| Feature | C | C++ |
|---|---|---|
| Paradigma | Estruturado | Orientado a Objetos (Multi) |
| Output | printf() |
cout << |
| Input | scanf() |
cin >> |
| Extensão | .c |
.cpp |
Termynal: Compilando 🖥️
Resumo ✅
- C é a mãe de todas.
- Compilador traduz para binário.
- Ponteiros acessam memória direta.
- C++ adiciona Classes ao poder do C.
Próxima Aula 🚀
- Sair do "Baixo Nível".
- Ir para o mundo corporativo e robusto.
- Java: "Escreva uma vez, rode em qualquer lugar".
👉 Tarefa: Instalar o Code::Blocks ou configurar GCC no VS Code!
Aula 10 - Web Moderna: JS e TS 🌐
Agenda 📅
- O Navegador como SO
- O DOM (Document Object Model)
- JavaScript (Dinamismo)
- Node.js (Backend)
- TypeScript (Segurança)
1. O Navegador é o Sistema Operacional 🖥️
- Antigamente: Navegador só mostrava texto.
- Hoje: Roda aplicativos completos (Google Docs, Figma, Spotify).
- Engine: V8 (Chrome), SpiderMonkey (Firefox).
2. O DOM 🌳
Document Object Model
- É a árvore de elementos da página.
- O HTML é estático. O DOM é vivo.
- O JavaScript muda o DOM em tempo real.
Visualizando o DOM
graph TD;
Doc[Document] --> HTML;
HTML --> Head;
HTML --> Body;
Head --> Meta;
Body --> H1[Título];
Body --> P[Parágrafo];
Body --> Button[Botão];
style Doc fill:#f9f;
style Button fill:#bbf;
3. JavaScript: A Linguagem da Web ⚡
- Única linguagem que roda nativamente no navegador.
- Interpretada: Não precisa compilar (o navegador lê e executa).
- Fracamente Tipada:
var x = 10depoisx = "oi"(Pode, mas cuidado!).
Interatividade (Eventos) 🖱️
O JS reage a Eventos (Clique, Teclado, Mouse).
const botao = document.querySelector('#meuBotao');
botao.addEventListener('click', () => {
alert("Você clicou!");
botao.style.backgroundColor = "red";
});
4. Node.js: JS fora da Caixa 📦
- Antes (2009): JS só rodava no Chrome.
- Ryan Dahl pegou a engine V8 e colocou no servidor.
- Nasceu o Node.js.
Por que Node? 🚀
- Mesmo código no Frontend e Backend.
- Extremamente rápido (IO Não-Bloqueante).
- Comunidade gigante (NPM).
Exemplo de Servidor (Express)
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Olá Mundo do Backend!');
});
app.listen(3000);
5. TypeScript: O JavaScript com Superpoderes 🛡️
- Criado pela Microsoft.
- Adiciona Tipagem Estática ao JS.
- O navegador NÃO entende TS. Ele precisa ser Transpilado para JS.
Por que usar TS? 🤔
JS aceita tudo (o que é ruim em projetos grandes). TS te avisa do erro antes de rodar.
Comparativo
JavaScript (Perigoso)
TypeScript (Seguro)
function soma(a: number, b: number): number {
return a + b;
}
soma(5, "10"); // ERRO: "String não é Number" 🚫
Frameworks Modernos ⚛️
Ninguém escreve JS puro ("Vanilla") em apps grandes.
- React (Meta/Facebook)
- Angular (Google)
- Vue.js (Comunidade)
- Todos usam Componentes e Estado.
Exercício Rápido ⚡
- Abra o Console do Navegador (F12).
- Digite
alert("Olá"). - Digite
document.body.style.backgroundColor = "black". - O que aconteceu?
Resumo ✅
- DOM: A estrutura da página.
- JavaScript: Dá vida ao DOM.
- Node.js: JS no servidor.
- TypeScript: JS com segurança de tipos.
Próxima Aula 🚀
- O mundo corporativo exige robustez.
- Java: A linguagem que roda em 3 bilhões de dispositivos.
- Orientação a Objetos "Raiz".
👉 Tarefa: Instalar o Node.js e rodar um console.log no terminal!
Aula 11 - Java e Orientação a Objetos ☕
Agenda 📅
- O Mundo dos Objetos
- Classes vs Objetos
- Java e a JVM
- Os 3 Pilares da OO
- Spring Boot (Java Moderno)
1. O Mundo Orientado a Objetos 🌍
Até agora, programamos Ações (Funções). Mas o mundo é feito de Coisas (Objetos).
- Estruturada: Verbo (Fazer algo).
- OO: Substantivo (Algo que faz).
2. Classe vs Objeto 🏗️
A distinção mais importante.
- Classe: O Molde. A Planta. A Ideia. (Abstrato).
- Objeto: A Instância. A Casa. A Coisa Real. (Concreto).
Visualizando (Mermaid)
classDiagram
class Carro {
+String cor
+acelerar()
}
Ferrari --|> Carro : É um
Fusca --|> Carro : É um
3. Java e a JVM ♻️
"Write Once, Run Anywhere" (Escreva uma vez, rode em qualquer lugar).
- O Java não compila para Binário direto.
- Ele compila para Bytecode (
.class). - A JVM (Máquina Virtual Java) roda esse Bytecode em qualquer sistema (Windows, Linux, Android, Geladeira).
4. Os 3 Pilares da OO 🏛️
- Encapsulamento
- Herança
- Polimorfismo
Encapsulamento 🛡️
Proteger os dados. Ninguém mexe no cofre do banco direto.
- Private: Só a classe vê.
- Public: Todo mundo vê.
- Getters/Setters: Porteiros que controlam o acesso.
Herança 🧬
Reaproveitar código.
Cachorroé umAnimal.Gatoé umAnimal.- Tudo que
Animaltem, eles herdam (nome, idade).
Polimorfismo 🎭
Muitas formas.
- O método
fazerSom()existe em Animal. - No Cachorro, ele faz "Au Au".
- No Gato, ele faz "Miau".
- O mesmo método se comporta diferente.
5. Spring Boot 🍃
Java não é só "tela preta". É a linguagem nº 1 em Bancos e Grandes Empresas.
- Spring Boot: Framework para criar APIs Web.
- Tira toda a configuração chata.
Exemplo de API
@RestController
public class OlaController {
@GetMapping("/ola")
public String dizerOla() {
return "Olá, Mundo Java Web!";
}
}
Exercício Mental 🧠
Modele um sistema de Venda.
- Classes:
Produto,Cliente,Venda. - Atributos:
Preco,Nome. - Métodos:
CalcularTotal(),Pagar().
Resumo ✅
- Classe é molde, Objeto é real.
- JVM garante portabilidade.
- Encapsulamento protege.
- Herança reutiliza.
- Polimorfismo flexibiliza.
Próxima Aula 🚀
- O concorrente direto do Java.
- Criado pela Microsoft.
- C# e plataforma .NET.
- Foco em produtividade.
👉 Tarefa: Instalar o JDK (Java Development Kit) e o VS Code Extension Pack for Java!
Aula 12 - Ecossistema C# e .NET 🔷
Agenda 📅
- O Que é .NET?
- Ferramentas (VS vs VS Code)
- C# Básico
- LINQ (A Mágica)
- F# (O Lado Funcional)
1. O Que é .NET? 🏗️
- C#: A Linguagem.
- .NET: A Plataforma (Runtime, Bibliotecas).
- Criado pela Microsoft para bater de frente com o Java.
- Hoje é Open Source e roda no Linux/Mac.
2. Ferramentas 🛠️
Onde programar?
- Visual Studio (Roxo): A IDE completa. Pesada. Faz tudo (Arrastar botões, Banco de Dados).
- VS Code (Azul): Editor leve. Rápido. Exige instalar extensões.
Criando um Projeto 💻
No terminal:
dotnet new console -o MeuAppcd MeuAppcode .dotnet run
3. C# Básico 📝
Muito parecido com Java.
using System;
class Program {
static void Main() {
Console.WriteLine("Olá, C#!");
// Em Java seria System.out.println
}
}
4. LINQ: A Joia da Coroa 💎
Language Integrated Query.
- Tratar listas como se fossem SQL.
- Filtrar, Ordenar, Transformar dados em uma linha.
Sem LINQ (Jeito Velho) 👴
Com LINQ (Jeito Novo) ✨
Muito mais limpo e legível!
Visualizando LINQ (Mermaid)
graph LR;
Input[Lista: 1, 2, 3, 4] -->|Where| Filtro[Pares: 2, 4];
Filtro -->|Select| Transf[Quadrado: 4, 16];
Transf --> Output[Resultado];
Tipos de Dados Poderosos 💪
- var: O compilador adivinha o tipo.
var x = 10;(Vira int).
- Nullable Types:
int? idade = null;(Pode ser nulo).- Evita erros de memória.
5. F# (Bônus) 🟣
- Linguagem Funcional do .NET.
- Focada em Matemática e Dados.
- Influenciou o LINQ e as Lambdas do C#.
- Código muito conciso.
Exercício Rápido ⚡
LINQ na Prática
Dada uma lista de preços: [10.5, 20.0, 5.0, 100.0]
- Filtre os preços maiores que 15.0.
- Ordene do maior para o menor.
- Mostre o resultado.
Resumo ✅
- C# é moderno, forte e produtivo.
- .NET roda em tudo.
- LINQ salva vidas (e linhas de código).
- Visual Studio é a casa do C#.
Próxima Aula 🚀
- Vamos sair das linguagens compiladas.
- Vamos para a linguagem mais popular da Ciência de Dados.
- Python: Simples, poderoso e lento (mas ninguém liga).
👉 Tarefa: Instalar o .NET SDK!
Aula 13 - Python e Ciência de Dados 🐍
Agenda 📅
- Por que Python?
- Sintaxe Limpa
- Estruturas de Dados Poderosas
- Modo Interativo (REPL) vs Scripts
- O Ecossistema de Data Science
1. Por que Python? 🚀
- Legibilidade: Parece inglês.
- Produtividade: Menos linhas, mais resultado.
- Ecossistema: IA, Data Science, Web, Automação.
- Não é o mais rápido (em CPU), mas é o mais rápido para desenvolver.
2. Sintaxe Limpa ✨
Esqueça {} e ;.
- Indentação (espaços) define os blocos.
- Força o código a ser organizado.
3. Estruturas de Dados 🧱
Em vez de Arrays e Matrizes chatos de declarar, temos Listas e Dicionários.
Listas (Arrays Turbinados)
Dicionários (Chave-Valor) 🔑
Como um JSON ou um Objeto.
Visualizando (Mermaid)
graph LR;
subgraph Lista [Lista: Compras]
L0[0: Maçã] --- L1[1: Banana] --- L2[2: Uva]
end
subgraph Dicionario [Dicionário: Pessoa]
D1[Chave: 'Nome'\nValor: 'Ana'] --- D2[Chave: 'Idade'\nValor: 25]
end
style Lista fill:#bbf;
style Dicionario fill:#f9f;
4. Modos de Execução ⚙️
-
REPL (Interativo):
- Digite
pythonno terminal. - Teste comandos na hora.
2 + 2. - Ótimo para aprender.
- Digite
-
Scripts (
.py):- Arquivos de texto com código.
python meu_script.py.- Para programas reais.
5. O Ecossistema de Dados 📊
Por que Data Science ama Python? Bibliotecas.
- Pandas: O "Excel" do programador. Manipula milhões de linhas.
- Matplotlib: Cria gráficos (Barras, Linhas, Pizza).
- TensorFlow/PyTorch: Inteligência Artificial.
Exemplo Pandas 🐼
import pandas as pd
# Ler uma planilha inteira
tabela = pd.read_csv("vendas.csv")
# Calcular totais
print(tabela["valor"].sum())
Exercício Rápido ⚡
Análise de Notas
- Crie uma lista com 4 notas:
[6.0, 7.5, 9.0, 5.5]. - Use
sum(lista)elen(lista)para calcular a média. - Se média > 6, imprima "Aprovado".
Resumo ✅
- Python é a linguagem da prototipagem e dos dados.
- Indentação é regra.
- Bibliotecas fazem o trabalho pesado.
Próxima Aula 🚀
- E quando performance é tudo?
- Sistemas que não podem travar.
- Rust e Go: As linguagens da Cloud e Sistemas.
👉 Tarefa: Instalar Python e fazer o exercício da média!
Aula 14 - Sistemas Modernos: Rust e Go 🦀🐹
Agenda 📅
- O Problema do C/C++
- Rust: Segurança de Memória
- Go: Concorrência Simples
- Comparativo
- Quando usar?
1. O Problema do C/C++ 💥
- C/C++ são rápidos, mas perigosos.
- 70% das vulnerabilidades de segurança são erros de memória (Microsoft).
- Buffer Overflow, Use-After-Free.
2. Rust 🦀
- Criada pela Mozilla.
- Promessa: Performance de C++ com Segurança de Memória.
- Sem Garbage Collector (GC).
- Sem Tela Azul.
O Segredo: Ownership (Posse) 🔑
- Cada dado tem um único dono.
- Quando o dono muda, o antigo perde o acesso.
- O compilador verifica isso antes de rodar.
Visualizando Ownership
graph LR;
A["Variável A\n(Dona do Dado)"] -- "Move" --> B["Variável B\n(Nova Dona)"];
style A fill:#f9f;
style B fill:#bbf;
NoteA["A morre.\nNão pode mais acessar!"] --- A
Código Rust
fn main() {
let a = String::from("Olá");
let b = a; // MOVEU para b
// println!("{}", a); // ERRO DE COMPILAÇÃO!
// O compilador te salva de usar memória inválida.
}
3. Go (Golang) 🐹
- Criada pelo Google (Rob Pike, Ken Thompson).
- Foco: Simplicidade e Google Scale.
- Compila ultra-rápido.
Concorrência Fácil (Goroutines) 🧵
- Threads são pesadas.
- Goroutines são leves (milhares em poucos MBs).
- Channels: Forma segura de conversar entre processos.
Visualizando Channels
graph LR;
T1[Goroutine A] -->|Envia 'Ping'| Canal((Channel));
Canal -->|Recebe 'Ping'| T2[Goroutine B];
style Canal fill:#ff9;
Código Go
package main
import "fmt"
func main() {
mensagens := make(chan string)
go func() { mensagens <- "Ping" }()
msg := <-mensagens
fmt.Println(msg)
}
4. Comparativo ⚖️
| Feature | Rust 🦀 | Go 🐹 |
|---|---|---|
| Foco | Controle, Segurança Absoluta | Simplicidade, Web Services |
| Aprendizado | Curva Íngreme (Dificil) | Muito Fácil |
| Performance | Extrema (Zero-Cost) | Muito Boa (Com GC) |
| Uso | Drivers, Engines, Crypto | Microservices, Cloud, APIs |
Termynal: Execução 🖥️
Resumo ✅
- Rust: Substitui C++ onde segurança é crítica.
- Go: Substitui Java/Node onde concorrência é crítica.
- Ambas são o futuro da Infraestrutura (Docker, Kubernetes).
Próxima Aula 🚀
- Sair do Servidor.
- Ir para o dispositivo que está na sua mão.
- Desenvolvimento Mobile: Flutter (Dart) e Nativo.
👉 Tarefa: Instalar o Go e rodar um "Olá Mundo"!
Aula 15 - Desenvolvimento Mobile 📱
Agenda 📅
- O Ecossistema Mobile
- Nativo vs Multiplataforma
- Dart e Flutter (Google)
- Árvore de Widgets
- Kotlin (Android Nativo)
1. O Mundo Mobile 🌍
Dois gigantes dominam o mercado.
- Android (Google): ~70% do mercado mundial. Aberto. Baseado em Linux/Java.
- iOS (Apple): ~29% do mercado. Fechado. Hardware Premium.
2. Abordagens de Desenvolvimento 🛠️
Como criar apps para eles?
-
Nativo:
- Performance Máxima.
- Acesso total ao hardware (GPS, Bluetooth).
- Problema: Precisa fazer 2 vezes (Kotlin para Android, Swift para iOS).
-
Multiplataforma:
- Escreve uma vez, roda nos dois.
- Flutter (Dart) ou React Native (JS).
- Vantagem: Velocidade de entrega.
3. Flutter e Dart 💙
- Dart: A linguagem (parece Java + JS).
- Flutter: O Kit de Ferramentas (UI Toolkit).
- Renderiza pixels direto na tela (como um jogo).
Tudo é um Widget 🧱
Botão é widget. Texto é widget. Layout é widget.
graph TD;
App[MaterialApp] --> Home["Tela Principal"];
Home --> AppBar[Barra Superior];
Home --> Body[Corpo];
Body --> Center;
Center --> Button["Botão Clique"];
style App fill:#f9f;
Código Flutter Básico
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("Meu App")),
body: Center(child: Text("Olá Mundo!")),
),
));
}
4. O Estado (State) ⚡
Apps são interativos. Se o usuário clica, a tela muda.
- StatelessWidget: Estático (Ícone, Texto).
- StatefulWidget: Dinâmico (Checkbox, Contador).
Ciclo de Vida do Estado
graph LR;
User["Usuário Clica"] --> Acao[setState];
Acao --> Build[Reconstruir Tela];
Build --> UI[Nova UI];
5. Kotlin (Android Nativo) 🤖
Para quando você precisa de poder bruto.
- Oficial do Google.
- 100% Compatível com Java.
- Conciso e seguro (sem NullPointerException).
Termynal: Criando App 📱
Resumo ✅
- Nativo: Melhor performance, mais trabalho.
- Multiplataforma: Menor custo, velocidade.
- Flutter: Desenha a tela do zero.
- Widgets: Blocos de construção.
Próxima Aula 🚀
- Sair do Cliente (Celular).
- Voltar para o Servidor (Backend).
- A tecnologia que roda 77% da Web.
- PHP e Arquitetura MVC.
👉 Tarefa: Rodar o "Counter App" do Flutter!
Aula 16 - PHP e o Lado do Servidor 🐘
Agenda 📅
- Como a Web Funciona?
- PHP: O Motor da Internet
- Arquitetura MVC
- Laravel (Framework)
- Projeto Final
1. O Ciclo da Web 🌍
Client vs Server.
- Cliente (Browser): Pede coisas (Request).
- Servidor: Processa e Devolve (Response).
- Banco de Dados: Guarda as informações.
Requisição e Resposta (Sequence)
sequenceDiagram
participant Browser
participant Servidor
participant Banco
Browser->>Servidor: 1. GET /perfil
Servidor->>Banco: 2. SELECT * FROM users
Banco-->>Servidor: 3. Dados (João, 25)
Servidor-->>Browser: 4. HTML Pronto
2. O Que é PHP? 🐘
PHP: Hypertext Preprocessor.
- Roda no Servidor (Back-end).
- Gera HTML dinâmico.
- Fácil de hospedar (qualquer servidor barato tem).
- Poderoso (Facebook, Wikipedia, WordPress).
Código PHP
<?php
$nome = "Maria";
$saldo = 100.50;
echo "<h1>Olá, $nome!</h1>";
echo "<p>Saldo: $saldo</p>";
?>
3. Arquitetura MVC 🏗️
Para organizar sites grandes, não misturamos código.
- Model (Modelo): Dados e Banco.
- View (Visão): HTML e Telas.
- Controller (Controlador): A Lógica.
Fluxo MVC
graph LR;
User -->|Rota| Controller;
Controller -->|Pede| Model;
Model -->|Devolve| Controller;
Controller -->|Envia| View;
View -->|HTML| User;
4. Laravel 🚀
O Framework PHP mais popular.
- Sintaxe elegante.
- Ferramentas prontas (Login, Email, Banco).
- "O PHP Moderno".
Projeto Final do Curso 🏆
Mural de Recados Fullstack
- Banco: MySQL (
recados: id, mensagem). - Back: PHP (Busca recados).
- Front: HTML/CSS (Mostra recados).
- Use tudo que aprendeu: Lógica, Loops, Vetores (Dados do banco), HTML.
Termynal: Servidor PHP 🖥️
Resumo do Módulo ✅
- Lógica: Algoritmos, Fluxogramas.
- Dados: Variáveis, Vetores, Matrizes.
- Tecnologias:
- Baixo nível (C/C++).
- Web (JS, PHP).
- Mobile (Flutter).
- Corporativo (Java, C#).
Parabéns! 🎓
Você completou a jornada de Lógica e Algoritmos. Você agora tem a base para aprender qualquer linguagem.
Próximos Passos? - Escolha uma área (Front, Back, Mobile, Dados). - Aprofunde-se na linguagem escolhida. - PRATIQUE!
👉 Projeto Final: Entregar o Mural de Recados!
Setups
Guias de Instalação 🛠️
Prepare seu ambiente para dominar as Expressões Regulares.
-
Ferramentas Online
A forma mais rápida de começar.
-
Desenvolvimento Desktop
Integre Regex no seu editor.