一尘不染

检测并从字符串中提取网址?

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;

有更好的主意吗?


阅读 238

收藏
2020-09-08

共1个答案

一尘不染

m.group(1)为您提供第一个匹配组,即第一个捕获括号。这是(https?|ftp|file)

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

您需要重复查找功能以匹配下一个并使用新的组数组。

2020-09-08