将一个由点分隔的字符串名改为下划线分隔并保留最后一个点。

3

你好,我有一个文件名为1208.flowers.blue.jpg,我想把它改成1208_flowers_blue.jpg

$str="1208.flowers.blue.jpg";
$count=substr_count($str,".");
if($count>1){
  //Change string to '1208_flowers_blue.jpg'
}

我该怎么做呢?如果这个问题已经有答案了,请告诉我。

3个回答

5

最简单的方法是使用正则表达式:

echo preg_replace('/\.(?=.*\.)/', '_', $str);

1
echo str_replace ('.', '_', substr ($str, 0, strrpos ($str, '.'))) . strrchr ($str, '.'); - user5588894
2
是的,那也可以。但有时候,您可能希望限制在单行中使用太多函数的情况。 :) - Object Manipulator

3

如果您想删除任何非单词字符(除了a-zA-Z0-9_),则以下正则表达式将匹配非单词字符:

$str="1208.flowers.blue.jpg";
echo preg_replace("/\W(?=.*\.[^.]*$)/", "_", $str);

这也将从文件名1208.flowers.blue.jpg中删除 . ,并更改为1208_flowers_blue.jpg

如果您只想从文件名中删除 . ,则需要在正则表达式中将\W 替换为 \.

$str="1208.flowers.blue.jpg";
echo preg_replace("/\.(?=.*\.[^.]*$)/", "_", $str);

1

请查看评论中的BenseidSeid提供的答案。

echo str_replace ('.', '_', substr ($str, 0, strrpos ($str, '.'))) . strrchr ($str, '.');

这个解决方案完全基于字符串函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接