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

Dúvidas sobre âncora

Ainda não compreendi totalmente o que faz o \b, ^, $. Eu entendi que ele pega uma posição específica no texto mas mesmo testando outros exemplos ainda não compreendi perfeitamente. Quando devo usar? E qual a diferença de (^,$) para o \b?

5 respostas

Fala aí Leonardo, beleza? Cara, tem uma simples diferença entre \b e ^$.

O \b é um limitador de caracteres por palavras, vamos dizer assim, portanto, se tivemos a seguinte frase:

mathe mathe mathe mathe mathe

Com o \b, podemos fazer:

(\bmathe\b)

Dessa maneira, ele irá selecionar todos as palavras, porque elas começam com e terminam com mathe, porém, se trocar por:

^(mathe)$

Ele não irá selecionar nenhuma, isso porque a frase não começa e termina com mathe, para resolver, teríamos que mudara String para:

mathe

Agora sim, ela começa a termina com mathe.

Espero ter ajudado.

Matheus, obrigado pela atenção.

Cara, eu ainda não consegui pegar bem a ideia. Eu acho que entendi a diferença entre \b e (^$). Como o instrutor falou, se você usa \b, não pode ter um \w antes ou depois dependendo de onde você colocar.

Mas nesse exemplo que você mostrou pra mim, ainda não consegui compreender.

Vamos lá...

O exemplo com o \b entendi por que você não tem nenhum \w na String alvo.

Agora o (^mathe$): a sua string alvo começa com a palavra "mathe" e termina com a palavra "mathe", porém você tem a repetição dessa string 5x, porém ela começa e termina com a mesma sequência de caracteres.

Quando eu utilizo o ^$, a regex só vai dar match se for exatamente aquilo que está buscando? Nada mais, nada menos? Mesmo se encontrar a mesma sequência N vezes no alvo?

solução!

A ideia do ˆ$ é que sua linha comece com ALGO e termine com ALGO, no caso o ALGO é o que for passado entre ˆ e $, a regex não deu match porque como você disse, temos a String 5x repetida.

Para que funcionasse, teríamos que trocar para: ^(mathe mathe mathe mathe mathe)$.

Espero ter ajudado.

Matheus, muito obrigado pela sua ajuda. Acho que agora entendi melhor como funciona as âncoras. Se puder me ajudar com uma última coisa...

Para dar match no exemplo com (^$)... por que não consigo match com o alvo

mathe mathe mathe mathe mathe

fazendo a regex

^(mathe\s+)+$

Eu entendo que nessa regex, eu estou colocando mathe com um ou mais espaços uma ou mais vezes?

Na verdade também não, pois com ^(mathe\s+)+$, você está falando que deve começar com mathe e terminar com um espaço, o que ele não termina, pois termina com e.

Para conseguir dar match teria que fazer algo parecido com:

^(([mathe])+([mathe\s])+)$

Aqui eu falo que vai ter um grupo de mathe que pode ser seguido por mathe e/ou espaço.

Espero ter ajudado.