使用PHP删除具有不同字符串长度的字符串的结尾

时间:2014-08-22 19:34:18

标签: php regex

使用PHP我有一个数组返回图像的数据:

Array
(
    [0] => http://website.dev/2014/05/my-file-name-here-710x557.png
    [1] => 710
    [2] => 557
    [3] => 1
)

根据上面的演示数据,我需要以某种方式将此图片网址转换为:

http://website.dev/2014/05/my-file-name-here.png从字符串中删除-710x557

要记住的一些事情是:

  1. 文件扩展名可以更改,并且可以是任何类型的文件类型
  2. 710x557可能不一定是3位x 3位数字。它可能是2或4
  3. 我提到这个的原因是为了表明我不能简单地使用PHP的字符串函数来删除字符串中的最后 12 字符然后再添加文件扩展名,因为最后的字符串字符可能介于两者之间有时长10和14个字符,但不总是12个。

    我希望避免使用繁重的正则表达式代码,但如果这是唯一或最好的方式,那么我说去吧。

    如何编写一个正则表达式来删除PHP中可能具有不同长度的字符串的结尾?

5 个答案:

答案 0 :(得分:9)

你可以使用这样的正则表达式:

-\d+x\d+(\.\w+)$

<强> Working demo

enter image description here

您可以使用的代码是:

$re = "/-\\d+x\\d+(\\.\\w+)$/"; 
$str = "http://website.dev/2014/05/my-file-name-here-710x557.png"; 
$subst = '\1'; 

$result = preg_replace($re, $subst, $str, 1);

我们的想法是使用-NumbersXNumbers(我们将其删除)匹配分辨率-\d+x\d+,然后使用捕获组使用(\.\w+)$捕获文件扩展名。检查上面的替换部分。

答案 1 :(得分:2)

只要它是2组数字,并且&#39; x&#39;在中间以破折号开头,你可以使用这个正则表达式:

-[\d]*x[\d]*

$string = 'http://website.dev/2014/05/my-file-name-here-710x557.png';
$pattern = '/-[\d]*x[\d]*/';
$replacement = '';
echo preg_replace($pattern, $replacement, $string);

http://phpfiddle.org/lite/code/eh40-6d1x

答案 2 :(得分:1)

您可以按以下方式使用strrpos来执行此操作:

$str = substr($str, 0, strrpos($str, '-')) . substr($str, strrpos($str, '.'));

答案 3 :(得分:1)

$newsrc = preg_replace('#\-\d+x\d+(\.\w+$)#', '$1', $arr[0]);

请参阅http://ideone.com/ZsELQ0

答案 4 :(得分:1)

您可以使用此基于正则表达式的代码:

$str = "http://website.dev/2014/05/my-file-name-here-710x557.png"; 
$re = '/-([^-]+)(?=\.[^-]*$)/'; 

$result = preg_replace($re, '', $str, 1);
//=> http://website.dev/2014/05/my-file-name-here.png

RegEx Demo