PHP删除字符后的所有内容并停止字符前的

时间:2019-02-11 15:03:11

标签: php

我的字符串:

$string = '/my-picture-gallery-1000x2000.jpg';

我需要删除字符串中最后一次出现的“-”(包括“-”)之后的所有内容,并在“。”处停止。在字符串中。

因此输出应为:

  

/my-picture-gallery.jpg

但是我需要它停止并保留“。”之后的所有内容。

5 个答案:

答案 0 :(得分:3)

应该能够结合使用PHP的strstr内置函数和str_replace来获得想要的结果

$string = '/my-picture-gallery-1000x2000.jpg';
echo str_replace(strrchr($string, '-'), '', $string) . strstr($string, '.');

那会让你离开:

  

/my-picture-gallery.jpg

可读性更高的版本

$string = '/my-picture-gallery-1000x2000.jpg';

$dimensions = strrchr($string, '-');
$extension = strrchr($string, '.');

$image = str_replace($dimensions, '', $string) . $extension;

答案 1 :(得分:2)

$string = '/my-picture-gallery-1000x2000.jpg';
echo substr($string,0,strrpos($string,'-')) . substr($string,strrpos($string,'.'));

答案 2 :(得分:0)

您可以使用 explode()函数。它返回字符串数组。只需选择一部分字符串,然后将它们组合成一个字符串即可。 有关 explode()函数的更多信息,位于:http://php.net/manual/en/function.explode.php

答案 3 :(得分:0)

尝试一下:

$string = '/my-picture-gallery-1000x2000.jpg';

$ext= strstr($string, '.');
$dash=strrpos($string,'-');

$filename= substr($string, 0 ,$dash);

echo $filename.$ext;

简而言之,您可以使用:

$filename = substr($string, 0 ,strrpos($string,'-')).strstr($string, '.');

答案 4 :(得分:0)

if(false !== $pos = strrpos($string, '-'))
  $s = substr($string, 0, $pos);

首先使用反向搜索检查机针是否在高位堆栈中。然后从开始到找到位置都获取字符串。

根据您的编辑,使用正则表达式将是适当的。这还具有可以处理UTF8文件路径的优点。

$new_name = preg_match('~^(.*)-[^-.]*(\..*)$~u', $string, $matches)
  ? $matches[1].$matches[2]
  : $string
;