帮助正则表达式检测字符串中的URL

时间:2011-01-04 09:11:32

标签: java regex

你好 我发现这个正则表达式检测字符串中的url并将它们包装在标记

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;
}

但是这个正则表达式不适用于以下模式:

https://www.myserver.com

所以请告知。

2 个答案:

答案 0 :(得分:2)

这一行:

.replaceAll("(?<!http://)www\\.[\\w/%.\\-?&=]+", "http://$0")

https://www.myserver.com更改为https://http://www.myserver.com

它确实已经指示了它。您需要将httpsftps?添加到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;
    }