Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Exercicio regex

Não esta claro porque o padrão do exercicio encontra todos os tipos de e-mail, inclusive aqueles que não tem .br

\w{2,50}@\w{2,15}.[a-z]{2,3}.[a-z]{2,3}

Ora, se o padrão busca por dois pontos, como pode ele encontrar um email que possui apenas .com e considerar que ele corresponde ao padrão? Além do mais ele busca de 2 a 3 caracteres apos o segundo ponto.

ele ignora toda esta parte: .[a-z]{2,3}

Eu testei e efetivamente o codigo funciona, agora não tenho ideia do porquê

1 resposta
solução!

Olá Ricardo, tudo bem com você?

Ainda bem que você abriu esse tópico, há um erro nessa regex, o ponto (.) não está sendo visto como "ponto" e sim como um meta-carácter da própria regex que significa qualquer coisa.

Vou te dar um exemplo: Se substituíssemos o email de: rodrigo@gmail.com para rodrigo@gmail9com ele ainda iria encontrar

A regex corrigida que encontra tanto email com .com como .com.br seria a seguinte:

regex_corrigida = "\w{2,50}@\w{2,15}\.[a-z]{2,3}\.?([a-z]{2,3})?"

Veja que antes do ponto eu adicionei o carácter de escape ( \ ) para identificar que quero realmente o ponto

Ele está capturando email que contém apenas o .com porque eu identifico aqui: \.?([a-z]{2,3})? Utilizando o quantificador da regex : ?

  • Que pode haver zero ou uma vez um ponto final
  • Que pode haver zero ou uma vez de 2 a 3 carácteres de a-z

Agora caso o objetivo fosse capturar apenas com .com.br seria:

regex_corrigida = "\w{2,50}@\w{2,15}\.[a-z]{2,3}\.[a-z]{2,3}"

Para entender todas essas particularidades da Regex temos um curso que aborda todos os tópicos aqui na Alura: Curso Regex

Muito obrigado novamente :)

Abraços e Bons Estudos!