2011-11-09 53 views
0

我想基本上试图"dir1/dir2/../dir3"转换为"dir1/dir3"通过使用正则表达式如下:降低相对/规范路径的复杂性? (如何消除“..”?)

filePath.replaceAll("^(\\w)?(<>:\"/\\|?*)//\\.\\./", ""); 

我在做什么错在这里?

我知道有很多规范化规则,但我只想要应用两个规则:

All "." segments are removed. 

If a ".." segment is preceded by a non-".." segment then both of these segments are removed. This step is repeated until it is no longer applicable. 

我也试过:

result = filePath.replace("^(\\w+)\\.\\./", ""); 

但它并没有制定出任何

+1

你确定File.getCanonicalPath()不是你真正需要的吗? –

+0

如果您希望手动规范化并使用正则表达式,请考虑多次运行更简单的正则表达式(直到输出保持不变)。那么这只是用“”每个阶段替换“路径/ ..”(加边缘守卫)的问题。 – 2011-11-09 18:45:25

+0

不..因为我不希望所有的规范化规则适用 – xonegirlz

回答

3

你不能使用这个正则表达式(是的,像你的例子那样简单的例子可能会工作,但会快速分解出更复杂的模式)。既然你使用Java,看看java.net.URI.normalize()

规范化此URI的路径......如果“..”部分由非之前“..”段则这两个部分都被删除。重复此步骤直至不再适用。 ...

+0

所以没有办法使用正则表达式进行规范化? – xonegirlz

+2

@xonegirlz:你为什么想要? – Tomalak

+0

看到我上面编辑的问题 – xonegirlz