我从此answer获取此(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\. (?: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");
}
}
答案 0 :(得分:2)
答案 1 :(得分:0)
你遇到的问题是你的正则表达式中的反斜杠字符()是Java的转义字符,因此它看到\。和\?并认为你试图逃避一个。和一个? - 因此编译错误,你可能会看到'无效的转义字符'。
要解决此问题,您需要使用自己的反斜杠转义反斜杠。你得到:
\\。和\\?
或者,完整形式:
(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\\. (?:jpg|gif|png))(?:\\?([^#]*))?(?:#(.*))?