Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Grupo e subgrupo

Ao utilizarmos o ? e o : no início de um grupo não queremos dizer que esse grupo não deve ser mostrado? Fiquei com a dúvida na segunda parte da resposta (?:>(.)<\/\1>), onde há dois grupos juntos/concatenados. O que não se quer mostrar está antes do início do segundo grupo (.) ? É isso?

2 respostas
solução!

Olá Rozenildo! Tudo bem? =)

Vamos lá, que RegEx às vezes dá uns nós da cabeça, mesmo. Rs.

Só para facilitar, a RegEx do exercício é a seguinte:

<(a)\s+href="(.+)"(?:>(.*)<\/\1>)

A primeira coisa, quais grupos ele seleciona? Cada parênteses representa um grupo, ou seja:

  • (a) é o primeiro grupo.
  • (.+) é o segundo grupo.
  • (?:>(.*)<\/\1>) é o terceiro grupo.

Observe ainda que dentro do terceiro temos um quarto grupo:

  • (.*) é o quarto grupo.

Vamos prosseguir... Quais são os grupos que essa expressão não seleciona?

Os grupos não capturados são aqueles que começam com ?:, ou seja, o terceiro grupo: (?:>(.*)<\/\1>).

E aí basta sabermos um exemplo de match inteiro. O que sabemos até aqui?

  1. O texto deve começar com <;
  2. Em seguida, devemos ter a letra a;
  3. Continuamos com um ou mais espaços;
  4. Temos, então, o texto href=";
  5. Após isso, um ou mais caracteres quaisquer;
  6. O conteúdo continuar com ".

Como vamos entrar em uma parte mais complicada, vamos ver o que temos até aqui, de fato:

<a href="www.google.com.br"

Agora vem a parte que talvez você tenha se confundido. Vem um grupo com:

  1. >;
  2. Um subgrupo, que está sendo capturado, com qualquer coisa (*.);
  3. Então temos </a>, fazendo backreference ao primeiro grupo capturado.

Dessa forma, nosso exemplo pode ser:

<a href="www.google.com.br">Google</a>

Ou, como no exemplo:

<a href="www.alura.com.br">Cursos online</a>

Espero ter ajudado! Qualquer dúvida, não deixe de postar por aqui para podermos ajudar! =)

Abraços e bons estudos,

Fábio

Obrigado, Fábio! Excelente explicação. Entendi perfeitamente. Valeu!