用单斜杠“ /”替换斜杠之间的点,即“ /./”

时间:2018-11-09 04:26:41

标签: java regex replace

对于此字符串dirPath

String dirPath = "c:/create/a/dir/very/deep/inside/../././../../../dir/";

我希望输出字符串看起来像:

"c:/create/a/dir/very/deep/inside/../../../../dir/";

我用过:

dirPath.replaceAll("/[.]/", "/");

但这给了:

c:/create/a/dir/very/deep/inside/.././../../../dir/
                                   ^^^ 

然后,尝试另外使用replaceAll作为:

dirPath.replaceAll("/[.]/", "/").replaceAll("/[.]/", "/");

那行得通!

我的问题是,为什么一个电话不能达到相同的结果? 如何以最简单的方式实现它?

P.S。另一个不适用于我的正则表达式:.replaceAll("($|/)[.]/", "$1")

1 个答案:

答案 0 :(得分:5)

您可以使用前瞻模式来避免消耗后续匹配所需的斜杠:

dirPath.replaceAll("/\\.(?=/)", "")

演示:https://regex101.com/r/qWKVU3/1http://tpcg.io/ijmYJF