如何从带有扩展名的文件名 C14-IMAGE-BACK-PREVIEW-TEST-1349965063.doc 中删除



可能的重复项:
PHP 正则表达式如何获取字符串的最后一部分

我想从文件名中删除特定字符串后面的字符串,但带有扩展名。在上面的文件名C14-IMAGE-BACK-PREVIEW-TEST-1349965063.doc中,我想删除部分-1349965063.删除后文件名应该是C14-IMAGE-BACK-PREVIEW-TEST

.doc这是我

所做的:

<?php
$name = "C14-IMAGE-BACK-PREVIEW-TEST-1349965063.doc";
$new_name = $name;
$search = "TEST";
$position =  strpos($name, $search);
$ext = pathinfo($name);
if($position !== false && !empty($ext['extension']))
{
    $new_name = substr($name, 0, $position + strlen($search)) . '.' . $ext['extension'];
}
var_dump($new_name);
$str = 'C14-IMAGE-BACK-PREVIEW-TEST-1349965063.doc';
$str = preg_replace('/^(.*)-(d+)(.doc)$/',"$1$3",$str);
您可以使用

substr:http://php.net/manual/en/function.substr.php

仅当字符串的第一部分具有一致的长度时,这才有效:

$string = 'C14-IMAGE-BACK-PREVIEW-TEST-1349965063.doc';
$start = 0;
$length = 27;
$first_part = substr($string, $start, $length);

然后只需将您的扩展重新添加到末尾即可。


长度不一致的替代建议:

$string = 'C14-IMAGE-BACK-PREVIEW-TEST-1349965063.doc';
$ext = pathinfo($string);
$parts = explode('TEST', $string);
$filename = $parts[0] . 'TEST' . $ext['extension'];

如果名称不断变化,但保持连字符结构,则可能会在连字符上爆炸。然后忽略最后一个数组条目,因为这是时间戳:

$string = 'C14-IMAGE-BACK-PREVIEW-TEST-1349965063.doc';
$ext = pathinfo($string);
$parts = explode('-', $string);
$file = '';
for ($i = 0; $i < count($parts) - 1; $i++)
{
    $file .= $parts[$i]; 
}
$file .= $ext['extension'];

最新更新