使用ereg_replace或preg_replace在php中保留部分文件名
我试图只留下前缀(下面示例中的WST)和数字。应删除任何后缀和文件扩展名。这应该让我知道产品代码 以下是三个可能的值:使用ereg_replace或preg_replace在php中保留部分文件名,php,preg-replace,ereg-replace,Php,Preg Replace,Ereg Replace,我试图只留下前缀(下面示例中的WST)和数字。应删除任何后缀和文件扩展名。这应该让我知道产品代码 以下是三个可能的值: 39159 FLAN.jpg 22201-HAV.jpg WST 503.jpg 这三个示例需要的输出是: 39159 22201 WST 503 这是我当前的ereg_replace,但它也删除了数字前的前缀: $number = ereg_replace("[^0-9]", "", $value); ereg*函数已弃用。你不应该再使用它们了 $name = bas
39159 FLAN.jpg
22201-HAV.jpg
WST 503.jpg
这三个示例需要的输出是:
39159
22201
WST 503
这是我当前的ereg_replace
,但它也删除了数字前的前缀:
$number = ereg_replace("[^0-9]", "", $value);
ereg*函数已弃用。你不应该再使用它们了
$name = basename($value, '.jpg');
现在在$name
中有了不带扩展名的文件名。您可以将名称和编号拆分为单独的变量,如下所示:
$name = str_replace('-', ' ', $name);
if (is_numeric($name[0])) {
list($number, $garbage) = explode(' ', $name);
$prefix = null; unset($garbage);
}
else list($prefix, $number) = explode(' ', $name);
但只有当前缀从不以数字开头时,此代码才能正常工作。但是你明白了。一个选择是删除最后一个数字之后的任何内容。如果您的姓名中有多个号码,则可能无法按预期工作:
preg_replace("/\D+$/", "WST 503.jpg", "");
另一个可能更强的选择是捕获第一个数字,以及之前的任何数字:
preg_match("/^\D*\d+/", "WST 503.jpg", $matches);
print_r($matches); // [0] => WST 503
快速脏脚本;-) 停止使用
ereg\u replace()
。它过时了!这将在我的示例中留下“FLAN”、“HAV”e.t.c?我也需要把它去掉!所以它只是前缀+numberI很抱歉,我认为“FLAN”和“HAV”也应该被提取为前缀,即使它们不是真正的“预修复”。我改了密码。现在你只得到了“真正的”前缀。谢谢Rik,毫无疑问这也会起作用,但我选择了Kobi的解决方案,因为它更简单。再次感谢!
<?php
function showProductNumberFromFilename($filename) {
// split filename
$filenameParts = explode('.', $filename);
// get extension
$extension = end($filenameParts);
// remove extension
$productNumber = str_replace($extension, '', $filename);
return substr($productNumber, 0, -1);
}
// echos 3159 FLAN
echo showProductNumberFromFilename('39159 FLAN.jpg');
// echos 22201-HAV
echo showProductNumberFromFilename('22201-HAV.jpg');
// echos WST 503
echo showProductNumberFromFilename('WST 503.jpg');
?>