2014-07-02 75 views
2

我想提取一個URL的路徑的第一部分。例如:從http://foo.com/bar/1/2/3我想提取bar。這裏是我使用的代碼:Java正則表達式:如何匹配URL路徑?

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

然而,這不符合上面列出的最微不足道的網址,如

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

打印什麼。乍一看,模式字符串看起來很清晰,並且顯然它應該可以工作。出了什麼問題?

回答

5

不匹配,因爲你的正則表達式不正確。您最後有/*,與/.*不一樣。

使用這個表達式:

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

或者刪除錨點$

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

明白了,謝謝。我會在9分鐘後讓我接受。 –

+1

不客氣,很高興它解決了。 – anubhava