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

Jas*_*vis -9 php regex

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

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

基于上面的演示数据,我需要以某种方式将此图像URL转换为:

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

要记住的一些事情是:

  1. 文件扩展名可以更改,并且可以是任何类型的文件类型
  2. 710x557可能不总是3位x 3位数字.它可能是2或4

我提到这个的原因是为了表明我不能简单地使用PHP的字符串函数来删除字符串中的最后12个字符然后再添加文件扩展名,因为最后的字符串字符有时可能长度在10到14个字符之间,而不是总是12 .

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

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

Fed*_*zza 9

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

-\d+x\d+(\.\w+)$
Run Code Online (Sandbox Code Playgroud)

工作演示

在此输入图像描述

您可以使用的代码是:

$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);
Run Code Online (Sandbox Code Playgroud)

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

  • @Fede,因为你可能正在帮助一个帮助吸血鬼?也尝试不要混合双引号和单引号.始终如一.我会使用单引号,这样我就不需要逃避反斜杠`\ d`. (7认同)
  • 那么,我是因为我在帮助别人而受到贬低?Downvotes是答案无效的时候.好哲学...... (7认同)
  • @HamZa那只是垃圾.我没有看到任何理由为什么我们应该"惩罚"帮助某人解决问题的人,完全停下来.如果您对问题有疑问,还有其他途径.由于这是一个公认的答案,并且是一个非常好的答案,它已经*已经*帮助了某人,并且不能"长期不帮助任何人".在我看来,这只是一个错位的仇杀. (3认同)
  • @HamZa实际上这是一个很好的帖子,我同意一些部分.也许SO应该为正则表达式创建一个分支.顺便说一下,正如我所说,回答downvotes是答案没有用,我不认为这是我的. (2认同)