Java Regex: How to Match URL Path?

20,598

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?://[^/]+/([^/]+)/");
Share:
20,598
David Williams
Author by

David Williams

Updated on July 31, 2022

Comments

  • David Williams
    David Williams almost 2 years

    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?

  • David Williams
    David Williams almost 10 years
    Got it, thanks. I will accept when SO lets me in 9 min.