【问题标题】:How to create reg-expression to find url file extention is present?如何创建正则表达式以查找存在的 url 文件扩展名?
【发布时间】:2011-05-16 15:49:49
【问题描述】:

以下是我正在使用的示例字符串:

http://www.asfradio.com/device.asp?u=username&p=password&s=east

我在代码中使用的当前检查:

if (data.endsWith(".asf") || (0 < data.indexOf(".asf")))

所以在这种情况下,我的检查失败,因为是的,有一个 .asf 字符串,但它后面是无线电,这使我的逻辑不好,因为这个链接不是 asf 类型...

我想要的是一个正则表达式,如果找到“.asf”并且“f”之后的下一个字符不是字母,则返回 true。

希望它有意义...

【问题讨论】:

  • 您看过 Java 正则表达式文档吗?你被困在哪里了?

标签: java regex


【解决方案1】:

检查文件扩展名的最简单方法是首先获取路径。 Java 的 URL 类是你需要做的:

URL url = new URL("http://blah.com......");

if (url.getPath().endsWith(".asf") {

   // your code here
}

【讨论】:

    【解决方案2】:

    在 Java 的正则表达式引擎中,您有 word boundary anchor \b

    搜索\\.asf\\b。为了将它与 String.matches() 一起使用,您必须用 .* 包装它:

    boolean found = inStr.matches(".*\\.asf\\b.*");
    

    更好的是,将编译后的模式存储在一个常量中:

    private static final Pattern PATTERN = Pattern.compile("\\.asf\\b");
    

    并像这样使用它:

    boolean found = PATTERN.matcher(inStr).find(); // not .matches()
    

    【讨论】:

    • 感谢您的回答!这正是我正在寻找的...... :)
    • 不客气。当人们记得说谢谢时,我总是很高兴。 :-)
    【解决方案3】:

    使用字边界\b

    \.asf\b
    

    可能你必须在 java 中双重转义。

    【讨论】:

      【解决方案4】:

      可能是行尾

      .*\.asf$
      

      不是行尾

      .*\.[^a-zA-Z].*
      

      【讨论】:

        【解决方案5】:

        下一个最好的检查是假设该序列要么在字符串的末尾,要么在中间的某个位置,然后是一个问号:

        if (data.endsWith(".asf") || data.contains(".asf?"))
        

        【讨论】:

          【解决方案6】:

          仅当 .asf 位于字符串末尾或 ? 之前时才匹配

          Pattern.compile("\\.asf(\\?|$)")
          

          【讨论】:

            猜你喜欢
            • 2017-12-17
            • 1970-01-01
            • 2010-09-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-18
            • 1970-01-01
            相关资源
            最近更新 更多