我需要在显示前通过preg_match删除图片扩展名。 最初,我使用模式 /(?:[^。] +)/ 来检测点,但是当图像名称包含点时它会错误地工作。
我怎么能强迫它从字符串末尾开始搜索点?或者更好的想法?
答案 0 :(得分:3)
pathinfo()
获得准确的结果。单行..
<?php
$imgname = 'someimg.tft.xyz.gif';
echo pathinfo($imgname)['filename']; //"prints" someimg.tft.xyz
答案 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