如何从非根相对路径中删除尾部斜杠和点。
例如,../../../somefile/here/
(独立于其深度),所以我得到/somefile/here/
答案 0 :(得分:7)
答案 1 :(得分:2)
您可以使用PHP提供的realpath()函数。但是,这需要文件存在。
答案 2 :(得分:2)
如果我理解正确的话:
$path = "/".str_replace("../","","../../../somefile/here/");
答案 3 :(得分:1)
答案 4 :(得分:1)
你可以尝试:
<?php
$str = '../../../somefile/here/';
$str = preg_replace('~(?:\.\./)+~', '/', $str);
echo $str,"\n";
?>
答案 5 :(得分:0)
(\.*/)*(?<capturegroup>.*)
第一组匹配一些点后跟斜线,无限次;第二组是你感兴趣的组。这将删除你的前导斜线,所以前面斜线。
请注意,这绝对不会证明您的主要斜线和句号不是明显愚蠢的。但是,它不会剥离路径中的前导点,就像第一组的明显([./])*
模式一样;它找到以斜线结尾的最长的点和斜线串,因此如果它以点开头,它不会伤害你的真实路径。
要注意明显的“/。” ltrim()策略将从目录名中删除前导点,如果你的第一个目录有一个完全合理的话,这是不好的,因为前导点用于隐藏目录。