这是一个简单的问题,但是我不明白。我想检测字符串中的url,然后将其替换为较短的url。
我从stackoverflow找到了这个表达式,但是结果仅仅是 http
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;
有更好的主意吗?
m.group(1)为您提供第一个匹配组,即第一个捕获括号。这是(https?|ftp|file)
(https?|ftp|file)
您应该尝试查看m.group(0)中是否有内容,或者用括号将所有模式括起来,然后再次使用m.group(1)。
您需要重复查找功能以匹配下一个并使用新的组数组。