降低相对/规范路径的复杂性? (如何消除“..”?)

时间:2011-11-09 18:35:36

标签: java regex

我正在尝试使用正则表达式将"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 个答案:

答案 0 :(得分:3)

你不能使用正则表达式(是的,像你的例子这样的简单情况可能会起作用,但是对于更复杂的模式会很快崩溃)。由于您使用java,请查看java.net.URI.normalize()

  

规范化此URI的路径...如果“..”段前面有非“..”段,则删除这两个段。重复此步骤,直到不再适用。 ...