PHP改变字符串的一部分

时间:2011-04-04 15:04:36

标签: php regex preg-replace str-replace ereg

我有一个php系统上传图像并使用-med -slider等后缀文件名,具体取决于图像的大小。但是只有一个图像文件名被保存到数据库中,所以当我想显示一个图像并从数据库中调用文件名时,我会得到类似的东西,

filename-med.jpg如何更改,以便我可以用-slider替换-med?这可能吗?我不擅长正则表达式,我认为我必须使用它?

7 个答案:

答案 0 :(得分:0)

使用像str_replace( '-med', '-slider', $file_name )

这样的str_replace()

答案 1 :(得分:0)

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

答案 2 :(得分:0)

尝试:

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

但是 - 如果你更愿意坚持你所拥有的,只需使用:

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

答案 5 :(得分:0)

不需要regexp,这太过分了。

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

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

答案 6 :(得分:0)

在这种情况下,正则表达式过度杀伤。

到目前为止提供的str_replace()解决方案中,Capsule的答案是最好的,但即使这个也不能保证适用于所有可能的文件名。它在不太可能(但非常可能)的情况下失败,其中字符串'-med.jpg'嵌入在更大的文件名中:例如filename-med.jpg_updated.jpg。如果文件名的扩展名为.jpeg,它也会失败。

使用简单的正则表达式可轻松实现100%可靠的解决方案:

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

请注意,此解决方案也可轻松容纳其他类型的图像文件扩展名。