【问题标题】:Regular expression for finding URL in Java String用于在 Java 字符串中查找 URL 的正则表达式
【发布时间】:2014-06-19 04:16:35
【问题描述】:

如何修改下面的正则表达式:

String URLpattern   = "((https?|ftp|gopher|telnet|file|Unsure|http):((//)|(\\\\))+[\\w\\d:#@%/;$()~_?\\+-=\\\\\\.&]*)"

是否考虑了以下所有 URL 形式?

http://www.website.com
https://www.website.com
www.website.com
website.com
http://website.com
https://website.com

编辑: 对于这个问题,有很多已经提出的解决方案。我可以列出其中的一些:

但是,尽管我也尝试了所有这些方法,但它们都没有建议解释该表达式的工作原理和原因。因此,每当出现故障时(对我来说,在website.com 和http://website.com 形式的网址中发生故障),新手(像我一样;))很难应用任何修改或了解发生了什么出现故障时开启。 一个解释清楚的解决方案总是比其他人提出的解决方案更好,并且下次无法复制=)

【问题讨论】:

  • 为什么我得到了这么多反对票?我的意思是:我寻找与该主题相关的其他问题,但没有一个提供有效的解决方案......如果您认为这不是一个好问题,您应该要求关闭它:)
  • 我们想看到努力。如果您进行过研究,请展示并解释为什么它对您没有帮助。

标签: java regex string url


【解决方案1】:

根据您的网站列表,以下正则表达式可以解决问题:

(https?://)?(www\.)?\w+\.com

Demo

【讨论】:

  • 我知道你在达到 20 次赞成票后赞成票不算数时的感觉,哈哈
  • @DavidWallace,谢谢,答案已更正。 /g 可能在我复制时错误地标记了。来自 regex101.com
  • 还有:我猜 Java 需要两个反斜杠
  • @Eleanore 好吧,不完全是。在字符串文字中使用正则表达式意味着您必须将反斜杠加倍,因为有关字符串文字如何工作的规则。如果您的正则表达式来自其他地方(例如从文件中读取),则不必将反斜杠加倍。
  • @Eleanore,如果我的回答有帮助,您介意接受吗?谢谢。
【解决方案2】:

试试这个,它工作正常。用你所有的网址测试!

private static final String URL_PATTERN = "(@)?(href=')?(HREF=')?(HREF=\")?(href=\")?(http://)?(https://)?" +
        "[a-zA-Z_0-9\\-]+(\\.\\w[a-zA-Z_0-9\\-]+)+(/[#&\\n\\-=?\\+\\%/\\.\\w]+)?";

private Pattern urlPattern =Pattern.compile(URL_PATTERN);

public boolean isURL(String url)
{
    boolean mat = urlPattern.matcher(url.trim().replace(" ","")).matches();
    return urlPattern.matcher(url.replace(" ","")).matches();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    相关资源
    最近更新 更多