我正在尝试基本上尝试通过使用正则表达式将"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+)\\.\\./", "");
但也没有成功
最佳答案
您不能为此使用正则表达式(是的,像您的示例这样的简单情况可能会起作用,但会很快分解为更复杂的模式)。由于您使用的是Java,因此请查看java.net.URI.normalize()
:
规范化此URI的路径...如果“ ..”段之前是非“ ..”段,则这两个段都将被删除。重复此步骤,直到不再适用。 ...