Php 将字符串名称从虚线改为下划线,并保留最后一个点

Php 将字符串名称从虚线改为下划线,并保留最后一个点,php,Php,您好,我有一个文件名1208.flowers.blue.jpg我想将此名称更改为 1208\u flowers\u blue.jpg $str="1208.flowers.blue.jpg"; $count=substr_count($str,"."); if($count>1){ //Change string to '1208_flowers_blue.jpg' } 我将如何做?如果这个问题已经回答,请让我知道。最短的方法是使用正则表达式: echo preg_replace('

您好,我有一个文件名
1208.flowers.blue.jpg
我想将此名称更改为
1208\u flowers\u blue.jpg

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

我将如何做?如果这个问题已经回答,请让我知道。

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

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

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

$str="1208.flowers.blue.jpg";
echo preg_replace("/\W(?=.*\.[^.]*$)/", "_", $str);
这还将从文件名
1208.flowers.blue.jpg
中删除
,以
1208\u flowers\u blue.jpg

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

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

在注释中也将此答案作为BenseidSeid进行检查

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

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

echo str_replace('.',''.',substr($str,0,strrpos($str,'.'))。strrchr($str,“.”)是的,那也行。但有时,您可能希望限制在一行中使用如此多的函数。:)