【问题标题】:Recognize an absolute web URL even without a scheme即使没有方案也能识别绝对 Web URL
【发布时间】:2016-04-04 16:28:31
【问题描述】:

我正在研究一种 Java 方法,该方法以浏览器地址栏的方式而不是严格的 URL 解析器的方式区分绝对和相对 URL。也就是说,如果它以主机开头,我希望它能够将 URL 识别为绝对 URL, 该方案是否存在。这样,它可以正确识别方案相对 URL(如 //example.com)和完全省略方案的 URL(如 example.comwikipedia.orglots.and-lots.of.domains.com.ng)。我目前使用的方法看起来像这样

public String checkPossiblyAbsolute(String url) {
    if (url.matches("^(\\/\\/)?([-_A-Za-z0-9]+\\.)+\\w{2,3}(\\/.*)?$")) {
        if (url.startsWith("//")) url = "http:" + url;
        else url = "http://" + url;
    }
    return url;
}

基本上,它会检查字符 A-Za-z0-9-_ 的点分隔序列,其中最后一个序列(TLD)正好包含 2 或 3 个字母。此外,字符串可能以可选的// 开头。我的测试按我预期的方式工作,但我真的想找到一种更简单(或至少更具可读性)的方法来做到这一点。有什么想法吗?

【问题讨论】:

    标签: java regex url url-scheme absolute-path


    【解决方案1】:

    不幸的是,Java 不允许您避免双重转义。 (某些语言允许@"une\scapedRegex")。

    不过,您可以对正则表达式语法进行一些修改。

    • \\. 可以变成 [.] 不是更短,但恕我直言,更具可读性。
    • \\/ 相同。设为[/]
    • 如果你使用不区分大小写的模式,你可以去掉A-Z。当您只有一个 A-Z 时可能不值得。

    除了将事物放入变量中之外,您无能为力。同样,如果你只有几个冗余可能不值得,但它可以提高可读性。你使用的是 Java,所以无论如何你都没有赢得代码高尔夫。

    【讨论】:

      猜你喜欢
      • 2016-09-22
      • 1970-01-01
      • 2013-06-29
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多