繁体   English   中英

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

[英]extract part of a path with filename with php

我需要使用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));

可以在第一个示例中正常运行,但在第二个示例中则无效。 我对正则表达式不太满意,我想就是这样。 什么是最优雅的解决方案?

您的方法很好,尽管在其中添加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

在3v4l.org上在线尝试。

现在,要进行限定:如果只需要路径的字符串部分,请使用parse_url 但是,如果您需要处理每个段(例如,按要求仅删除最后六个段),请使用explode / manipulate / implode的通用模式。

我在上面将这些步骤中的每一个都分开了,因此您可以调试并选择最适合您的部分。

使用它,根据需要替换$ url:

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

最好的祝福!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM