[resolvido]

Bom dia a todos ! :smiley:

Estou com um problema no desenvolvimento de uma expressão regular.
A idéia do padrão que quero estabelecer é bem simples, porém não consigo aplicá-lo.
Ai vai…

// Pattern
[^(gif)(js)(jpg)]$
Ou seja eu gostaria de tornar válidas somente string que não terminem com gif, js ou jpg.
Porém dentro de uma lista “todos” os metacaracteres perdem sua funcionalidade, assim não consigo formar grupos dentro dela.

Alguem daqui já se deparou com essa necessidade, ou tem uma dica de solução.

Vlww ! :wink:

String regex = "\.(bmp)|(jpeg)|(js)$"; if (!str.matches(regex)) { // ... }

[code]String regex = “.*(gif|js|jpg)$”;

String valid = “loolololo gif abc”;
String invalid = “lololol.jpg”;

System.out.println(!valid.matches(regex));
System.out.println(!invalid.matches(regex));[/code]

Ótimo guia pra aprender

Acabou que a solução deve te ser essa mesmo.

// Padrão válido
String pattern = “^((http|https|ftp): (/){2}(www.)?(” + dominio + “))[A-Za-z0-9/.?_-]*”;

// Padrão inválido
String patterInvalid = “.(js|jpg|jpeg|gif|bmp|css|png|swf|pdf)$”;

if( str.matches(pattern) && !str.matches(patterInvalid) ){

}

É que estava tentando pensar em uma solução abrangendo tudo em um eg só, mas desse jeito ai ficou bem simples e funfou numa boa.

Valeu mesmo camarada ! :smiley:

hahahaha… postamos juntos victorcosta :stuck_out_tongue:

Valeu mesmo pela ajuda ai galera !
Essa comunidade é 10 !

:smiley:

@victorcosta

muito bom o link !!!

como faço aqui para dar “baixa” no post …
eu já vi alguem com isso escrito na assinatua

[quote=raphaelwct]@victorcosta

muito bom o link !!!

como faço aqui para dar “baixa” no post …
eu já vi alguem com isso escrito na assinatua
[/quote]

Clique em editar e adicione [RESOLVIDO] ao titulo.

Ah cuidado com o String.matches, ele só aceita se a String INTEIRA estiver de acordo com o padrão
Se tivesse escrito uma regex “termina com jpg|js|gif” teria que usar regex.matcher(input).find();

[code]Pattern regex = Pattern.compile("(gif|js|jpg)$");

String valid = “loolololo gif abc”;
String invalid = “lololol.jpg”;

System.out.println(!regex.matcher(valid).find());
System.out.println(!regex.matcher(invalid).find());[/code]
No post anterior tinha “.*” que significa 0 ou mais repetições de qualquer caractere

@victorcosta

Vamos ver se eu entendi mesmo…
em String.matches(pattern) não é possível usar âncoras na expressão regular ?
pois ele casa o padrão com a string por inteiro…

Caso eu queira usar todos os recursos de expressões regular o melhor seria usar Pattern.compile(pattern).matcher(str).find() ?