Соответствие URL с регулярным выражением - PullRequest
1 голос
/ 03 ноября 2011

Я беру это (?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\. (?:jpg|gif|png))(?:\?([^#]*))?(?:#(.*))? регулярное выражение из этого ответа . если я использую это в моей программе ниже, чтобы соответствовать URL-адресу, значит, я получаю ошибку компилятора.

Это мой код:

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");

}


}

Ответы [ 2 ]

2 голосов
/ 03 ноября 2011

Вам нужно сбежать дважды.

Так что замените \ на \\.

Смотри, как работает

0 голосов
/ 03 ноября 2011

Проблема в том, что символы обратной косой черты () в вашем регулярном выражении являются escape-символами для Java, поэтому он видит \.а также \?и думает, что вы пытаетесь сбежать.а?- следовательно, ошибка компиляции, о которой вы, вероятно, говорите, говоря о «недопустимых escape-символах».

Чтобы исправить это, вам нужно избежать обратных слешей с их собственными обратными слешами.Вы получите:

\\.и \\?

или в полном виде:

(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\\.  (?:jpg|gif|png))(?:\\?([^#]*))?(?:#(.*))?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...