Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ereg_replace或preg_replace在php中保留部分文件名_Php_Preg Replace_Ereg Replace - Fatal编程技术网

使用ereg_replace或preg_replace在php中保留部分文件名

使用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

我试图只留下前缀(下面示例中的WST)和数字。应删除任何后缀和文件扩展名。这应该让我知道产品代码

以下是三个可能的值:

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');
?>