2011-03-03 32 views
4

如何創建REGEX檢測一個 「字符串URL」 包含文件擴展名(.PDF,.JPEG,.asp的,.CFM ...)?Java的正則表達式:如何檢測URL文件擴展

Valids(不擴展):

傷殘(擴展):

感謝, 塞爾索

+0

你是什麼意思*包含文件擴展名*?你的意思是*以其中一個字符串*結尾嗎?你能舉幾個你不想匹配的例子嗎? –

回答

0

不是Java開發人員了,但你可以定義你用下面的正則表達式

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

找什麼不確定該功能的外觀。

+0

你可能想要?爲簡單起見而不是{0,1}。 – Anonymoose

3

在Java中,您最好使用String.endsWith()這更快,更容易閱讀。 例如:

"file.jpg".endsWith(".jpg") == true 
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")); 
} 
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()" 
+0

這是一個更好的方法,特別是在已經有requestURI的過濾器中。 –

0

如果下面的代碼返回true,則包含在最終文件擴展名:

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

假設文件擴展名是一個點,後跟2,3或4個字母字符。