2011-04-04 98 views
1

我有一个php系统,上传图像和后缀他们的文件名称与-med -slider等取决于图像的大小。然而,只有一个图像文件名被保存到数据库中,所以当我想显示一个图像并从数据库中调用文件名时,我会得到如下所示的文件:PHP更改字符串的一部分

filename-med.jpg我该如何改变这一点可以用-slider替换-med?这可能吗?我不擅长正则表达式,我认为我将不得不使用它?

+0

看起来像一个RTFM任务。如果文件名不包含'-med',str-replace就足够了。如果这样做,那么你将不得不使用pregreplace像一个正则表达式像'(。*) - med \ .jpg' – ITroubs 2011-04-04 15:09:12

回答

0
str_replace("-med", "-slider", "filename-med.jpg"); 
0

尝试:

$newFilename = str_replace("-med", "-slider", "filename-med.jpg"): 
0

这是微不足道的,你甚至不需要正则表达式来做到这一点。 str_replace(http://uk2.php.net/str_replace)函数就是你需要的。

$old_filename = "foo-med.jpg" 
$new_filename = str_replace('-med','-slider',$old_filename); 
0

我建议只存储图像的“文件名”部分,然后在运行时添加-med.jpg,-slider.jpg ...等。

但是 - 如果你宁愿跟你有什么坚持,只需使用:

$myFile = "filename-med.jpg"; 
echo str_replace('-med', '-slider', $myFile); 
+0

大声笑 - 圣牛 - 在30秒内它写了我的答案,每个人在stackoverflow上来,并添加了回答! :) – Dave 2011-04-04 15:10:55

0

无需正则表达式,这是矫枉过正。

我还会在干草堆和替换字符串中加入“.jpg”,因为文件名可能已经包含“-med”,例如“test-med-med.jpg”。

str_replace('-med.jpg', '-slider.jpg', $filename); 
0

正则表达式在这种情况下是不矫枉过正

迄今为止提到的str_replace()解决方案中,Capsule的答案是最好的,但即使这样也不能保证适用于所有可能的文件名。在字符串'-med.jpg'被嵌入到较大的文件名中的情况下(尽管很可能),它失败了。 filename-med.jpg_updated.jpg。如果文件名有.jpeg扩展名,它也会失败。

A 100%可靠的解决方案很容易用简单的正则表达式获得:

$re = '/-med\.(jpe?g|gif|png)$/mi'; 
$filename = preg_replace($re, '-slider.$1', $filename); 

注意,该溶液容易适应其它类型的图像文件的扩展名的为好。