用php提取带文件名的路径的一部分

时间:2017-08-22 00:58:49

标签: php regex

我需要使用php提取部分网址。网址的最后6个部分是我需要的部分。 url的第一部分的长度和目录数量不同。所以,如果我有这样的网址:

https://www.random.ccc/random2/part1/part2/part3/2017/08/file.txt

或者这个:

https://www.random.vov/part1/part2/part3/2016/08/file.pdf

我需要的是:

/part1/part2/part3/2017/08/file.txt

或者这个:

/part1/part2/part3/2016/08/file.pdf

我试过这个:

$string = implode("/",array_slice(explode("/",$string,8),6,4));

在第一个例子上工作正常,但在第二个例子上没有。我对正则表达式不是很好,我想这就是方法。什么是最优雅的解决方案?

2 个答案:

答案 0 :(得分:3)

你的方法很好,虽然在那里添加parse_url来隔离路径会有很大帮助:

$path  = parse_url($url, PHP_URL_PATH); // just the path part of the URL
$parts = explode('/', $path);           // all the components
$parts = array_slice($parts, -6);       // the last six
$path  = implode('/', $parts);          // back together as a string

Try it online at 3v4l.org.

现在,要符合条件:如果您只需要路径的字符串部分,请使用parse_url。但是,如果您需要处理每个细分(例如仅删除最后六个细分),请使用explode /操纵/ implode的常见模式。

我已将上述每个步骤分开,以便您可以调试并选择最适合您的部分。

答案 1 :(得分:0)

使用此选项,根据需要替换$ url:

$url= "https://www.random.vov/part1/part2/part3/2016/08/file.pdf";
preg_match("%/[^/]*?/[^/]*?/[^/]*?/[^/]*?/[^/]*?/[^/]*?$%", $url, $matches);
echo $matches[0];
最好的问候!