Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 降低相对/规范路径的复杂性?(如何消除?)_Java_Regex - Fatal编程技术网

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

Java 降低相对/规范路径的复杂性?(如何消除?),java,regex,Java,Regex,我试图通过使用正则表达式将“dir1/dir2/./dir3”转换为“dir1/dir3”,如下所示: filePath.replaceAll("^(\\w)?(<>:\"/\\|?*)//\\.\\./", ""); 我还尝试: result = filePath.replace("^(\\w+)\\.\\./", ""); 但是它也不起作用您不能使用正则表达式(是的,像您的示例这样的简单情况可能会起作用,但会很快分解为更复杂的模式)。由于您使用java,请看一下: 规范化此U

我试图通过使用正则表达式将
“dir1/dir2/./dir3”
转换为
“dir1/dir3”
,如下所示:

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

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

但是它也不起作用

您不能使用正则表达式(是的,像您的示例这样的简单情况可能会起作用,但会很快分解为更复杂的模式)。由于您使用java,请看一下:

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


您不能为此使用正则表达式(是的,像您的示例这样的简单情况可能会起作用,但对于更复杂的模式会很快崩溃)。由于您使用java,请看一下:

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


所以没有办法用正则表达式进行规范化?@xonegirlz:Dmitry是对的,这不能用正则表达式来解决。几乎所有框架都有专门的文件路径规范化方法,您应该使用它们。毕竟,它们是经过尝试和测试的,并且考虑到了一些你一开始可能没有想到的情况。所以没有办法使用正则表达式进行规范化吗?@xonegirlz:Dmitry是对的,这不能用正则表达式来解决。几乎所有框架都有专门的文件路径规范化方法,您应该使用它们。毕竟,它们是经过尝试和测试的,并考虑到你可能不首先想到的情况。你确定文件GETCANONICROPATH()不是你真正需要的吗?如果你真希望手工进行归一化,并且使用正则表达式,考虑多次运行一个更简单的正则表达式(直到输出不变)。然后,只需将“路径/。”(添加边缘保护)替换为“每个阶段。编号”。。因为我不希望所有的规范化规则都是applied@xonegirlz考虑您不能在一个过程中使用正则表达式,因为您必须计算删除了多少个“…”。您不能单独使用正则表达式。这就是我的观点使路径表达式的语法对上下文敏感。正则表达式的设计只适用于正则语法。所以,我原来的答案仍然是。你确定文件GETCANONICAL PATH()不是你真正需要的吗?如果你真的希望用手来正常化,并且使用正则表达式,考虑多次运行一个更简单的正则表达式(直到输出不变)。然后,只需将“路径/。”(添加边缘保护)替换为“每个阶段。编号”。。因为我不希望所有的规范化规则都是applied@xonegirlz考虑您不能在一个过程中使用正则表达式,因为您必须计算删除了多少个“…”。您不能单独使用正则表达式。这就是我的观点使路径表达式的语法对上下文敏感。正则表达式的设计只适用于正则语法。所以我最初的答案仍然有效。
result = filePath.replace("^(\\w+)\\.\\./", "");