如果我有以下任何一条路径
../../../filename.txt
../../filename.txt
../filename.txt
我怎样才能用一个“../”替换任意数量的“../”,例如
../../../filename.txt
or
../../filename.txt
变成
../filename.txt
然而,这些路径位于 css 字符串内,我不想将字符串分开来执行此操作,我只想替换它们所在的 '../' 。
谢谢
preg_replace
如果您记得转义句点,这应该很容易:
$result = preg_replace('~(?:\.\./)+~', '../', $input);
这匹配一个或多个连续出现的../
并简单地写回../
。
使用正则表达式
(\.\./)+
并将其替换为
../
+
匹配前面的字符或组 1 到多次
RegEx 的替代品(主要供参考,@m.buettner 有最佳答案)。
$fn = '../../../filename.txt';
$fn_parts = (array_reverse(explode("../", $fn)));
echo "../" . $fn_parts[0];
或 ./ 如果没有。
$fn = 'filename.txt';
$fn_parts = (array_reverse(explode("../", $fn)));
echo (count($fn_parts) > 1 ? "../" : "./") . $fn_parts[0];