2

如果我有以下任何一条路径

../../../filename.txt
../../filename.txt
../filename.txt

我怎样才能用一个“../”替换任意数量的“../”,例如

../../../filename.txt
or
../../filename.txt

变成

../filename.txt

然而,这些路径位于 css 字符串内,我不想将字符串分开来执行此操作,我只想替换它们所在的 '../' 。

谢谢

4

3 回答 3

4

preg_replace如果您记得转义句点,这应该很容易:

$result = preg_replace('~(?:\.\./)+~', '../', $input);

这匹配一个或多个连续出现的../并简单地写回../

于 2012-11-24T18:33:46.480 回答
2

使用正则表达式

(\.\./)+

并将其替换为

../


+匹配前面的字符或组 1 到多次

于 2012-11-24T18:33:35.403 回答
0

RegEx 的替代品(主要供参考,@m.buettner 有最佳答案)。

$fn = '../../../filename.txt';
$fn_parts = (array_reverse(explode("../", $fn)));
echo "../" . $fn_parts[0];

ideone

或 ./ 如果没有。

$fn = 'filename.txt';
$fn_parts = (array_reverse(explode("../", $fn)));
echo (count($fn_parts) > 1 ? "../" : "./") . $fn_parts[0];

ideone

于 2012-11-24T18:49:19.190 回答