public static String detectUrls(String text) {
String newText = text
.replaceAll("(?<!http://)www\\.[\\w/%.\\-?&=]+", "http://$0")
.replaceAll("(?:https?|ftps?|http?)://[\\w/%.\\-?&=]+",
"<a href='$0'>$0</a>");
return newText;
}
但是这个正则表达式不适用于以下模式:
所以请告知。
答案 0 :(得分:2)
这一行:
.replaceAll("(?<!http://)www\\.[\\w/%.\\-?&=]+", "http://$0")
将https://www.myserver.com
更改为https://http://www.myserver.com
它确实已经指示了它。您需要将https
和ftps?
添加到lookbehind。
您也可以忽略协议:
.replaceAll("(?<!://)www\\.", "http://$0")
答案 1 :(得分:1)
我认为这可能是你想要的:
public static String detectLinks(String text) {
String newText = text.replaceAll(
"(?<!(http|https|ftps)://)www\\.[\\w/%.\\-?&=]+", "$0")
.replaceAll("(?<!://)www\\.", "http://$0").replaceAll(
"(?:https?|ftps?|http?)://[\\w/%.\\-?&=+#]+",
"<a href='$0'>$0</a>")
return newText;
}