在显示之前通过preg_match删除图像扩展名

时间:2014-02-20 08:38:03

标签: php

我需要在显示前通过preg_match删除图片扩展名。 最初,我使用模式 /(?:[^。] +)/ 来检测点,但是当图像名称包含点时它会错误地工作。

我怎么能强迫它从字符串末尾开始搜索点?或者更好的想法?

5 个答案:

答案 0 :(得分:3)

您可以使用pathinfo()获得准确的结果。

单行..

<?php
$imgname = 'someimg.tft.xyz.gif';
echo pathinfo($imgname)['filename']; //"prints" someimg.tft.xyz

Demo

答案 1 :(得分:2)

您可以使用/[^.]+$/删除最后一个点后面的任何内容。 $匹配“字符串结尾”(在旁注:a ^可用于匹配“字符串的开头”)。

如果您将捕获组设置为“非捕获”,则无需将其包含在BTW中,无需任何括号即可正常工作。

答案 2 :(得分:2)

对于网络兼容的图片格式,您可以使用:

/^.*\.(jpg|jpeg|png|gif|svg)$/

或者您可以使用最后添加$的模式:

/(?:[^.]+$)/ 

答案 3 :(得分:0)

你不需要正则表达式,你不能这样做吗?;

$fileNamePieces = explode(".", $fileName);
array_pop($fileNamePieces);
$fileName = implode(".", $fileNamePieces);

然而,如果你坚持使用正则表达式,这就是我刚才提出的那个;

^.+\.\D{2,4}$

另外,here是我用来测试我的正则表达式的网站,以防你需要测试你的正则表达式

最后(愚蠢的我们),php有一个内置的功能; basename()为您提供文件名和扩展名。

答案 4 :(得分:0)

试试这个工作

$file = "flower.rose.red.jpg";
$filename = substr($file, 0, strrpos($file, '.'));
$extension = substr($file, strrpos($file, '.'));
$img = str_replace($extension, '', $file);
echo $img;

OUTPUT:flower.rose.red