2010-07-19 54 views
2

我正在使用正則表達式模式來分解servlet的上下文路徑。正則表達式沒有正確分解文件路徑的版本號

/{1,2}([^/{1,2}]+) 

這對於像/User/folder1/folder2/folder3/這樣的簡單路徑非常適用。

但是,在更現實世界的情況下,如果其中一個文件夾名稱包含虛線版本號,例如:/User/username/Library/Tomcat/apache-tomcat-6.0.24,則似乎存在問題。

在這種情況下,Matcher.group(1)將返回apache-tomcat-6.0.而不是apache-tomcat-6.0.24。我不知道爲什麼會這樣。我相信它不應該。

任何見解?

編輯

這工作:

/{1,2}([^/]+) 
+1

在.NET中,{x,y}表示匹配x到最後一個標記的出現次數。此外,你可以在[...]條款之後編寫它。這些在java中意味着什麼?另外,是否有任何可以使用的String.Split來分割/? – sisve 2010-07-19 08:36:40

+0

@菲利普幾乎回答了它。我需要記住只使用字符類之外的範圍量詞表達式。我的錯。我也可以使用字符串拆分,但我也想在xpath表達式的另一個正則表達式中使用它,以便從謂詞中分離名稱空間。謝謝你的評論! – FK82 2010-07-19 08:59:17

回答

5

[^/{1,2}]意味着 「除了/{1,2}每個字符」,所以242沒有得到匹配(它將與a/2這樣的路徑相同,並且與版本號無關)。在[…]裏面,大多數字符都是按字面解釋的,而像{1,2}這樣的結構不起作用。如果您只是簡單地說[^/]+,我認爲它應該可以工作。我不知道爲什麼要匹配兩個連續的斜線 - 只需匹配一個斜線並過濾掉空目錄名稱即可。

+0

好的,謝謝。我想匹配雙斜線的原因是因爲我也想用這個正則表達式來表示xpath表達式,其中'//'是任何後代元素的縮寫。 – FK82 2010-07-19 08:56:05