Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php提取文件名为的部分路径_Php_Regex - Fatal编程技术网

使用php提取文件名为的部分路径

使用php提取文件名为的部分路径,php,regex,Php,Regex,我需要使用php提取一部分URL。url的最后6段是我需要的部分。url的第一部分在目录的长度和数量上有所不同。因此,如果我有这样一个url: 或者这个: /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(explo

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

或者这个:

/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\u 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\u url
。但是,如果您需要处理每个段(如按要求仅删除最后六个),则使用
分解
/operate/
内爆
的通用模式


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

您的方法很好,尽管在其中添加
parse\u 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\u url
。但是,如果您需要处理每个段(如按要求仅删除最后六个),则使用
分解
/operate/
内爆
的通用模式


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

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

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

致以最良好的祝愿

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

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

致以最良好的祝愿

你只想要“part1”之后的所有内容吗?如果你确实想要“part1”之后的所有内容,而不考虑长度,你可以简单地在part1上拆分。如果它不会出现两次
explode(“/part1/”,$str)是否只需要“part1”之后的所有内容?如果您确实需要“part1”之后的所有内容,而不考虑长度,则可以简单地在part1上拆分。如果它不会出现两次
explode(“/part1/”,$str)完美。非常感谢,太好了。非常感谢你。