Ali Taha Ali Mahboub
Ali Taha Ali Mahboub

Reputation: 3501

Help with regex to detect urls in a string

Hi guys i found this regex to detect urls in a string and wraps them inside the tag

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

but this regex doesn't work with the following pattern:

https://www.myserver.com

so please advise.

Upvotes: 1

Views: 264

Answers (2)

Mahmoud Saleh
Mahmoud Saleh

Reputation: 33605

I think that this is maybe you want:

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

Upvotes: 1

Kobi
Kobi

Reputation: 138017

This line:

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

Changes https://www.myserver.com to https://http://www.myserver.com

It does exactly has you've instructed it. You need to add https, and probably ftps? to the lookbehind as well.

You may also ignore the protocol:

.replaceAll("(?<!://)www\\.", "http://$0")

Upvotes: 2

Related Questions