有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从字符串中检测并提取url?

这是一个简单的问题,但我就是不明白。 我想检测字符串中的url,并用一个较短的字符串替换它们

我从stackoverflow中找到了这个表达式,但结果只是http

Pattern p = Pattern.compile("\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]",Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(str);
        boolean result = m.find();
        while (result) {
            for (int i = 1; i <= m.groupCount(); i++) {
                String url=m.group(i);
                str = str.replace(url, shorten(url));
            }
            result = m.find();
        }
        return html;

还有更好的主意吗


共 (3) 个答案

  1. # 1 楼答案

    m.group(1)给出第一个匹配的组,也就是说第一个捕获括号。这里是(https?|ftp|file)

    您应该尝试查看m.group(0)中是否有内容,或者用括号括住所有模式,然后再次使用m.group(1)

    您需要重复find函数以匹配下一个函数,并使用新的组数组

  2. # 3 楼答案

    检测URL并非易事。如果获取以https开头的字符串就足够了|ftp |文件,然后就可以了。这里的问题是,您有一个捕获组,即(),而这些仅在http的第一部分附近

    我会使用(?:)将这部分变成一个非捕获组,并在整个内容周围加上括号

    "\\b((?:https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|])"