Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Skoitoman

[Resolvido] MatchCollection apenas com 1 resultado

Recommended Posts

Galera poderiam me dar uma ajuda?

 

Desenvolvi o seguinte método para retornar apenas o valor de um grupo de cada ocorrência na expressão regular:

Onde:

 

Configuracoes.ExpressaoTeste possui a expressão "^(\[{1}imag{1}\:{1}\"{1})(.{1,})(\"{1}\]{1})$".

E _verificar possui a string "[imag:\"teste\"][imag:\"teste2\"][imag:\"teste3\"]"

 

public List<string> ListaImagensConteudo()
{
    List<string> retorno = new List<string>();

    //Seta a expressão para consulta de imagens
    regex = new Regex(Configuracoes.ExpressaoTeste);

    //Seleciona todas as ocorrencias
    MatchCollection matches = regex.Matches(@_verificar);

    foreach (Match match in matches)
    {
        //Lista todos os grupos da expressao
        GroupCollection grupos = match.Groups;

        //Retorna apenas o valor do grupo que é o nome da imagem
        retorno.Add(grupos[2].Value);
    }

    return retorno;
}

A expressão regular é justamente para validar se a string possui a substring [imag:\"xxxxxx\"], ele encontra porém o MatchCollection exibe sempre uma ocorrência mas nesse exemplo possui 3.

 

Ja alterei a expressão para "(\[{1}imag{1}\:{1}\"{1})(.{1,})(\"{1}\]{1})" e ".*(\[{1}imag{1}\:{1}\"{1})(.{1,})(\"{1}\]{1}).*" mas mesmo assim não funciona, alguem tem alguma idéia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é essa é a questão, vou simplificar.

 

Configuracoes.ExpressaoTeste possui a expressão:

^(\[{1}imag{1}\:{1}\"{1})(.{1,})(\"{1}\]{1})$;

 

regex = new Regex(Configuracoes.ExpressaoTeste);

//Seleciona todas as ocorrencias
MatchCollection matches = regex.Matches(@"[imag:\"imagem1.jpg\"][imag:\"imagem2.jpg\"][imag:\"imagem3.jpg\"]");

matches deveria trazer três ocorrências: [imag:\"imagem1.jpg\"], [imag:\"magem2.jpg\"] e [imag:\"imagem3.jpg\"], porém apresenta apenas uma que é "[imag:\"imagem1.jpg\"][imag:\"imagem2.jpg\"][imag:\"imagem3.jpg\]".

 

Eu preciso recuperar todos os nomes de imagem, resolveria com o match trazendo cada ocorrência, então aonde será que está o erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, consegui resolver, o problema estava na expressão.

O trecho .{1,} eu sabia que significava tudo, mas não que era tudo literalmente kkkkk, este trecho simplesmente ignorava todo o restante da expressão, então ele entendia que o final que era "] fazia parte da mesma, então eu mudei para [A-Za-z0-9\.\/\&\?]{1,}.

Também simplifiquei um pouquinho a expressão mas a m3rd@ erra essa mesma kkkk.

 

Ficou assim:

(\[imag\:\")([A-Za-z0-9\.\/\&\?]{1,})(\"\])

 

 

Valew!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.