Java Regex:如何匹配URL路径?

Dav*_*ams 3 java regex url

我试图提取URL路径的第一部分.例如:从http://foo.com/bar/1/2/3我想要提取bar.这是我正在使用的代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

但是,这与上面列出的最琐碎的网址不匹配,如

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

没有打印.乍一看,模式字符串看起来很清晰,就像它显然应该工作.出了什么问题?

anu*_*ava 6

不匹配,因为你的正则表达式不正确.你/*到底有什么不一样的/.*.

使用这个正则表达式:

Pattern pattern = Pattern.compile("^https?://[^/]+/([^/]+)/.*$");
Run Code Online (Sandbox Code Playgroud)

或删除锚点$:

Pattern pattern = Pattern.compile("^https?://[^/]+/([^/]+)/");
Run Code Online (Sandbox Code Playgroud)