1

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.

1

2 Answers 2

2

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")
Sign up to request clarification or add additional context in comments.

Comments

1

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.