如何創建REGEX檢測一個 「字符串URL」 包含文件擴展名(.PDF,.JPEG,.asp的,.CFM ...)?Java的正則表達式:如何檢測URL文件擴展
Valids(不擴展):
傷殘(擴展):
- http://www.thesis.com/paper.pdf
- http://pics.co.uk/mypic.png
- http://jpeg.com/images/cool/the_image.JPEG
感謝, 塞爾索
如何創建REGEX檢測一個 「字符串URL」 包含文件擴展名(.PDF,.JPEG,.asp的,.CFM ...)?Java的正則表達式:如何檢測URL文件擴展
Valids(不擴展):
傷殘(擴展):
感謝, 塞爾索
不是Java開發人員了,但你可以定義你用下面的正則表達式
"/\.(pdf|jpe{0,1}g|asp|docx{0,1}|xlsx{0,1}|cfm)$/i"
找什麼不確定該功能的外觀。
你可能想要?爲簡單起見而不是{0,1}。 – Anonymoose
在Java中,您最好使用String.endsWith()這更快,更容易閱讀。 例如:
"file.jpg".endsWith(".jpg") == true
這個怎麼樣?
// 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"));
}
替代版本,而正則表達式只是使用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()"
這是一個更好的方法,特別是在已經有requestURI的過濾器中。 –
如果下面的代碼返回true,則包含在最終文件擴展名:
urlString.matches("\\p{Graph}+\\.\\p{Alpha}{2,4}$");
假設文件擴展名是一個點,後跟2,3或4個字母字符。
你是什麼意思*包含文件擴展名*?你的意思是*以其中一個字符串*結尾嗎?你能舉幾個你不想匹配的例子嗎? –