【问题标题】:extract part of a path with filename with php使用 php 提取带有文件名的路径的一部分
【发布时间】:2017-08-22 00:58:49
【问题描述】:

我需要使用 php 提取一部分 url。网址的最后 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));

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

【问题讨论】:

  • 你只想要“part1”之后的所有内容
  • 如果您确实想要“part1”之后的所有内容而不管长度如何,您可以简单地在 part1 上拆分。如果它不会出现两次explode("/part1/",$str);

标签: php regex


【解决方案1】:

您的方法很好,尽管在其中添加 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/manipulate/implode 的通用模式。

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

【讨论】:

  • 完美。非常感谢。
【解决方案2】:

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

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

最好的问候!

【讨论】:

    猜你喜欢
    • 2013-03-15
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2012-04-26
    相关资源
    最近更新 更多