我有这样的路径:
../../images/trades/general/banners/header3.jpg
如何将最后两个目录和文件名作为单个字符串返回? 我希望返回"常规/横幅/标题3.jpg"。 请记住,目录和文件名可能会有所不同。
谢谢! 瑞克
$string = '../../images/trades/general/banners/header3.jpg';
echo lastPortionOfPath($string);
function lastPortionOfPath($string, $segments= 3) {
$chunks = explode('/', $string);
$chunks = array_slice($chunks, count($chunks) - $segments, $segments);
return implode('/', $chunks);
}
$chain = "../../images/trades/general/banners/header3.jpg";
/*
* All this regex do the same thing
*
$regex = "/^.+(/[a-zA-Z0-9]+/[a-zA-Z0-9]+/[a-zA-Z0-9]+.[a-zA-Z]+)$/";
$regex = "/^.+((/[a-zA-Z0-9]+){3}/[a-zA-Z0-9]+.[a-zA-Z]+)$/";
$regex = "/^.+((/[a-zA-Z0-9]+){3}.[a-zA-Z]+)$/";
*/
创建符合您需求的正则表达式字符串
$regex = "/^.+((/[a-zA-Z0-9]+){3}.[a-zA-Z]{2,})$/";
括号用于捕获与括号中的正则表达式匹配的所有内容,并且可以使用preg_match
函数的第三个值检索所有这些值,在本例中为$matches
if(preg_match( $regex, $chain, $matches)){
// $result will be equal to "/general/banners/header3.jpg"
$result = substr($matches[1], 1, strlen($matches[1]) - 1); // remove the first /
}
echo $result; // general/banners/header3.jpg
一步一步:
路径
$path = "../../images/trades/general/banners/header3.jpg";
用斜杠分隔字符串
$path = explode('/',$path);
读取生成的数组的大小并减去 3,因为这是您想要的部分数(1 个文件 + 2 个目录(:
$pathSize=count($path)-3;
$newPath = $path[$pathSize].'/'.$path[$pathSize+1].'/'.$path[$[pathSize+2];
显示结果
echo 'Result: '.$newPath;