我需要使用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));
在第一个例子上工作正常,但在第二个例子上没有。我对正则表达式不是很好,我想这就是方法。什么是最优雅的解决方案?
答案 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
现在,要符合条件:如果您只需要路径的字符串部分,请使用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];
最好的问候!