Java Regex:如何检测具有文件扩展名的URL

时间:2011-03-03 22:09:45

标签: java regex string url

如何创建 REGEX 以检测“String url”是否包含文件扩展名( .pdf,.jpeg,.asp,.cfm ... )?

Valids(没有扩展名):

残疾人(带扩展名):

谢谢, 塞尔索

5 个答案:

答案 0 :(得分:3)

在Java中,最好使用String.endsWith()这样更快更容易阅读。 例如:

"file.jpg".endsWith(".jpg") == true

答案 1 :(得分:3)

这个怎么样?

// assuming the file extension is either 3 or 4 characters long
public boolean hasFileExtension(String s) {
    return s.matches("^[\\w\\d\\:\\/\\.]+\\.\\w{3,4}(\\?[\\w\\W]*)?$");
}

@Test
public void testHasFileExtension() {
    assertTrue("3-character extension", hasFileExtension("http://www.yahoo.com/a.pdf"));
    assertTrue("3-character extension", hasFileExtension("http://www.yahoo.com/a.htm"));
    assertTrue("4-character extension", hasFileExtension("http://www.yahoo.com/a.html"));
    assertTrue("3-character extension with param", hasFileExtension("http://www.yahoo.com/a.pdf?p=1"));
    assertTrue("4-character extension with param", hasFileExtension("http://www.yahoo.com/a.html?p=1&p=2"));

    assertFalse("2-character extension", hasFileExtension("http://www.yahoo.com/a.co"));
    assertFalse("2-character extension with param", hasFileExtension("http://www.yahoo.com/a.co?p=1&p=2"));
    assertFalse("no extension", hasFileExtension("http://www.yahoo.com/hello"));
    assertFalse("no extension with param", hasFileExtension("http://www.yahoo.com/hello?p=1&p=2"));
    assertFalse("no extension with param ends with .htm", hasFileExtension("http://www.yahoo.com/hello?p=1&p=a.htm"));
}

答案 2 :(得分:3)

替代版本没有正则表达式但使用了URI类:

import java.net.*;

class IsFile { 
  public static void main( String ... args ) throws Exception { 
    URI u = new URI( args[0] );
    for( String ext : new String[] {".png", ".pdf", ".jpg", ".html"  } ) { 
      if( u.getPath().endsWith( ext ) ) { 
        System.out.println("Yeap");
        break;
      }
    }
  }
}

适用于:

java IsFile "http://download.oracle.com/javase/6/docs/api/java/net/URI.html#getPath()"

答案 3 :(得分:0)

不再是Java开发人员,但您可以使用以下正则表达式定义您要查找的内容

"/\.(pdf|jpe{0,1}g|asp|docx{0,1}|xlsx{0,1}|cfm)$/i"

不确定该功能的外观。

答案 4 :(得分:0)

如果以下代码返回true,则最后包含一个文件扩展名:

urlString.matches("\\p{Graph}+\\.\\p{Alpha}{2,4}$");

假设文件扩展名是一个点,后跟2,3或4个字母字符。