【问题标题】:modify regexp to detect all url links [duplicate]修改正则表达式以检测所有 url 链接 [重复]
【发布时间】:2014-02-14 17:58:07
【问题描述】:

我有方法可以将我返回到字符串中的链接数组,但仅当链接具有“http”或“www”前缀(http://site.com 或 www.site.com) 。并且还需要检测没有前缀的链接只是 site.com 请帮帮我

ArrayList retrieveLinks(String text) {
ArrayList links = new ArrayList();

String regex = "\\(?\\b(http://|https://|www[.])[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(text);
while(m.find()) {
String urlStr = m.group();
char[] stringArray1 = urlStr.toCharArray();

if (urlStr.startsWith("(") && urlStr.endsWith(")"))
{

    char[] stringArray = urlStr.toCharArray();

    char[] newArray = new char[stringArray.length-2];
    System.arraycopy(stringArray, 1, newArray, 0, stringArray.length-2);
    urlStr = new String(newArray);
   // System.out.println("Finally Url ="+newArray.toString());

}
//System.out.println("...Url..."+urlStr);
links.add(urlStr);
}
return links;
}

【问题讨论】:

    标签: java regex url pattern-matching


    【解决方案1】:

    不评论源代码的其余部分

    使前缀可选,在声明可能前缀的组之后使用?。

    String regex = "\\(?\\b(http://|https://|www[.])?[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]";
    

    查看实时测试here。

    【讨论】:

    • 整个正则表达式真的很模糊,前缀可能是唯一将 URL 与随机字符串区分开来的东西...... OP 你可能想先处理正则表达式的其余部分(你可以找到一些在线示例已用于 URL 验证,常见问题)。此外,除其他外,http://|https:// 真的只是https?://。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2019-01-16
    • 2021-08-19
    • 1970-01-01
    相关资源
    最近更新 更多