【问题标题】:Java Regex: How detect a URL with file extensionJava Regex:如何检测带有文件扩展名的 URL
【发布时间】:2011-07-08 10:01:46
【问题描述】:

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

有效(不带扩展名):

无效(带有扩展名):

谢谢, 塞尔索

【问题讨论】:

  • 包含文件扩展名是什么意思?你的意思是以这些字符串之一结尾?你能举几个你不想匹配的例子吗?

标签: java regex string url


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    不带正则表达式但使用 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 的过滤器中。
    【解决方案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"));
    }
    

    【讨论】:

      【解决方案4】:

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

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

      不确定函数会是什么样子。

      【讨论】:

      • 你可能想要?为简单起见,而不是 {0,1}。
      【解决方案5】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-17
        • 2013-05-03
        • 1970-01-01
        • 2015-05-26
        • 1970-01-01
        • 1970-01-01
        • 2012-03-04
        • 1970-01-01
        相关资源
        最近更新 更多