使用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
。
要记住的一些事情是:
我提到这个的原因是为了表明我不能简单地使用PHP的字符串函数来删除字符串中的最后 12 字符然后再添加文件扩展名,因为最后的字符串字符可能介于两者之间有时长10和14个字符,但不总是12个。
我希望避免使用繁重的正则表达式代码,但如果这是唯一或最好的方式,那么我说去吧。
如何编写一个正则表达式来删除PHP中可能具有不同长度的字符串的结尾?
答案 0 :(得分:9)
你可以使用这样的正则表达式:
-\d+x\d+(\.\w+)$
<强> Working demo 强>
您可以使用的代码是:
$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);
答案 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]);
答案 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