2
respostas

duvida com o funcionamento do \b

Fazendo o exercício, cheguei na RegEx:

\b([a-z.]{4,14}[a-z\d])@(?:caelum.com.br|alura.com.br)\b

bem próxima à resposta do instrutor só que com o \b para evitar que selecionasse apenas uma parte do nome de usuários que tivessem mais de 15 caracteres. Ex:

Eusousuper.mario1@caelum.com.br

Contudo não funciona como esperado quando temos por exemplo 1super.mario@caelum.com.br.

Ao invés de ignorar essa entrada, a RegEx seleciona o seguinte pedaço:

1super.mario@caelum.com.br

Por que isso acontece?

2 respostas

Oi, Eric, tudo bem?

\b é uma âncora, e isso significa que ele irá capturar um padrão específico no início, final ou palavra exata. Por que a sua regex não captura a frase: 1super.mario@caelum.com.br? Porque ela começa com um número e a sua regex não especifica isso: \b([a-z.]{4,14}[a-z\d])@, para que possa aceitar e o \b crie um padrão para o iníco da frase, a sua regex pode ficar assim:

\b([A-Za-z0-9_.]{4,14}[a-z\d])@

Assim, ela captura os números também e underline, caso tenha.

Espero ter te ajudado!

Taís, acho que não ficou claro o que eu queria dizer. Eu queria realmente que essa regex não pegasse esse tipo de usuário, porém ela seleciona parte dele e é isso que eu não consigo entender. Num alvo: 1super.mario@caelum.com.br supernova@caelum.com.br dalila@alura.com.br

Essa regex deveria selecionar apenas os dois últimos usuários e ignorar o primeiro totalmente, contudo não é isso que acontece. Ela seleciona os dois últimos e a parte .mario@caelum.com.br do primeiro.

É essa seleção parcial do primeiro usuário que não consigo conceber como funciona.