David Williams
David Williams

Reputation: 8654

Java Regex: How to Match URL Path?

I am trying to extract the first part of the path of a URL. For example: from http://foo.com/bar/1/2/3 I want to extract bar. Here is the code I am using:

private static String getFirstPartOfPath(String url)
{
    Pattern pattern = Pattern.compile("^https?://[^/]+/([^/]+)/*$");
    Matcher matcher = pattern.matcher(url);
    if(matcher.find())
    {
        System.out.println(matcher.group(1));
    }
    return null;
}

However, this does not match the most trivial url listed above, as in

public static void main(String[] args)
{
    getFirstPartOfPath("http://foo.com/bar/1/2/3");
}

prints nothing. At first glance the pattern string seems clear and like it should obviously work. What is going wrong?

Upvotes: 6

Views: 23338

Answers (1)

anubhava
anubhava

Reputation: 785128

Not matching because your regex is not correct. You have /* in the end that is not same as /.*.

Use this regex:

Pattern pattern = Pattern.compile("^https?://[^/]+/([^/]+)/.*$");

Or remove anchor $:

Pattern pattern = Pattern.compile("^https?://[^/]+/([^/]+)/");

Upvotes: 8

Related Questions