去除点和斜线正则表达式 - 非相对

时间:2010-09-07 18:55:14

标签: php regex

如何从非根相对路径中删除尾部斜杠和点。

例如,../../../somefile/here/(独立于其深度),所以我得到/somefile/here/

6 个答案:

答案 0 :(得分:7)

不需要正则表达式,而是使用/. ltrim()。像这样:

 echo "/".ltrim("../../../somefile/here/", "/.");

输出:

 /somefile/here/

答案 1 :(得分:2)

您可以使用PHP提供的realpath()函数。但是,这需要文件存在。

答案 2 :(得分:2)

如果我理解正确的话:

$path = "/".str_replace("../","","../../../somefile/here/");  

答案 3 :(得分:1)

这应该有效:

<?php
echo "/".preg_replace('/\.\.\/+/',"","../../../somefile/here/")
?>

您可以对其进行测试here

答案 4 :(得分:1)

你可以尝试:

<?php
$str = '../../../somefile/here/';
$str = preg_replace('~(?:\.\./)+~', '/', $str);
echo $str,"\n";
?>

答案 5 :(得分:0)

(\.*/)*(?<capturegroup>.*)

第一组匹配一些点后跟斜线,无限次;第二组是你感兴趣的组。这将删除你的前导斜线,所以前面斜线。

请注意,这绝对不会证明您的主要斜线和句号不是明显愚蠢的。但是,它不会剥离路径中的前导点,就像第一组的明显([./])*模式一样;它找到以斜线结尾的最长的点和斜线串,因此如果它以点开头,它不会伤害你的真实路径。

要注意明显的“/。” ltrim()策略将从目录名中删除前导点,如果你的第一个目录有一个完全合理的话,这是不好的,因为前导点用于隐藏目录。