Java Regex: как определить URL с расширением файла - PullRequest
5 голосов
/ 04 марта 2011

Как создать REGEX , чтобы определить, содержит ли «String url» расширение файла ( .pdf, .jpeg, .asp, .cfm ... )?

Действительно (без расширений):

Инвалиды (с добавочными номерами):

Спасибо, Celso

Ответы [ 5 ]

3 голосов
/ 04 марта 2011

Альтернативная версия без регулярного выражения, но с использованием класса 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 голосов
/ 04 марта 2011

В Java лучше использовать String.endsWith () Это быстрее и проще для чтения.Пример:

"file.jpg".endsWith(".jpg") == true
3 голосов
/ 04 марта 2011

Как насчет этого?

// 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"));
}
0 голосов
/ 17 апреля 2012

Если следующий код возвращает true, то в конце он содержит расширение файла:

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

Предполагается, что расширение файла представляет собой точку, за которой следуют 2, 3 или 4 буквенных символа.

0 голосов
/ 04 марта 2011

Больше не Java-разработчик, но вы можете определить, что вы ищете, с помощью следующего регулярного выражения

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

Не уверен, как будет выглядеть функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...