使用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];