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;
还有更好的主意吗
# 1 楼答案
m.group(1)给出第一个匹配的组,也就是说第一个捕获括号。这里是
(https?|ftp|file)
您应该尝试查看m.group(0)中是否有内容,或者用括号括住所有模式,然后再次使用m.group(1)
您需要重复find函数以匹配下一个函数,并使用新的组数组
# 2 楼答案
https://github.com/linkedin/URL-Detector
# 3 楼答案
检测URL并非易事。如果获取以https开头的字符串就足够了|ftp |文件,然后就可以了。这里的问题是,您有一个捕获组,即
()
,而这些仅在http的第一部分附近我会使用(?:)将这部分变成一个非捕获组,并在整个内容周围加上括号