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

标签 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+)\\.\\./", "");

但也没成功

最佳答案

您不能为此使用正则表达式(是的,像您的示例这样的简单情况可能会起作用,但对于更复杂的模式会很快崩溃)。既然你用的是java,那就看看java.net.URI.normalize() :

Normalizes this URI's path ... 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. ...

关于java - 降低相对/规范路径的复杂性? (如何消除 ".."?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8069796/

相关文章:

java - Spring Boot 应用程序 Gradle 构建可以在本地运行,但在部署到 Heroku 时不能运行

java - 链表 - 迭代添加方法 - 无 getter 和 setter

c++ - boost 的正则表达式无法编译

python - 在 Python 正则表达式中指定匹配新行的不同方法

javascript - 使用正则表达式匹配 javascript 中的多次出现

java - while循环,似乎无法让它获得正确的数据

java - 如何在java中打印第n个数字系列

java - 多态有时会比 if/else 慢吗?

c# - RegEx 以 [ 开头并以 ] 结尾 - 仅匹配单词

javascript - 使用正则表达式验证 mm/dd/yyyy