2011-11-03 2 views
1

Je prends cette (?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\. (?:jpg|gif|png))(?:\?([^#]*))?(?:#(.*))? expression régulière à partir de ce answer. si je l'utilise dans mon programme ci-dessous pour correspondre à l'URL signifie que je reçois erreur du compilateur.Correspondance URL avec l'expression rationnelle

Ceci est mon code:

public static void main(String[] args) { 
String url="http://justfuckinggoogleit.com/bart.gif"; 
matchesImageUrl(url); 

} 
public static void matchesImageUrl(String url){ 
Pattern imagePattern=Pattern.compile("(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\. (?:jpg|gif|png))(?:\?([^#]*))?(?:#(.*))?"); 

if(imagePattern.matcher(url).matches()){ 

    System.out.println("image matches with the pattern" + url); 


} 
else{ 

    System.out.println("image does not matches with the pattern"); 

} 


} 

Répondre

2

Vous devez échapper deux fois.

Remplacez donc \ par \\.

See it work

+0

Je donnerais 10 pour le lien dans votre ideone, si je pouvais: P – Perception

0

Le problème que vous avez est que les caractères backslash() dans votre regex sont des caractères d'échappement pour Java, il voit \. et \? et pense que vous essayez d'échapper à un. et un? - d'où l'erreur de compilation que vous voyez probablement parler de 'caractères d'échappement invalides'.

Pour corriger cela, vous devez échapper les barres obliques inverses avec leurs propres barres obliques inverses. vous obtenez:

\\. et \\?

ou, en pleine forme:

(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\\. (?:jpg|gif|png))(?:\\?([^#]*))?(?:#(.*))? 
Questions connexes