使用php替换css中的前导点和斜线

使用php替换css中的前导点和斜线,php,regex,replace,Php,Regex,Replace,如果我有以下路径之一 ../../../filename.txt ../../filename.txt ../filename.txt 如何将任意数量的“../”替换为一个“../”例如 ../../../filename.txt or ../../filename.txt 变成 ../filename.txt 但是,这些路径位于css字符串中,我不想为了实现这一点而将字符串分开,我只想替换它们所在的“../” 谢谢使用正则表达式 (\.\./)+ 并将其替换为 。/ +多次匹配前面的字

如果我有以下路径之一

../../../filename.txt
../../filename.txt
../filename.txt
如何将任意数量的“../”替换为一个“../”例如

../../../filename.txt
or
../../filename.txt
变成

../filename.txt
但是,这些路径位于css字符串中,我不想为了实现这一点而将字符串分开,我只想替换它们所在的“../”

谢谢使用正则表达式

(\.\./)+

并将其替换为

。/



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

如果您记得转义句点,使用
preg\u replace
应该很容易:

$result = preg_replace('~(?:\.\./)+~', '../', $input);
这将匹配一个或多个连续出现的
。/
,并简单地写回
。/

替代正则表达式(主要用于参考,@m.buettner有最佳答案)

如果没有,则使用/或

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

这很好用!感谢您快速正确的回复。我会在几分钟后选择它作为答案。谢谢
$fn = 'filename.txt';
$fn_parts = (array_reverse(explode("../", $fn)));
echo (count($fn_parts) > 1 ? "../" : "./") . $fn_parts[0];