【问题标题】:Using ereg_replace or preg_replace to leave part of a filename in php使用 ereg_replace 或 preg_replace 在 php 中保留部分文件名
【发布时间】:2011-05-21 12:45:01
【问题描述】:

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

以下是三个可能的值:

39159 FLAN.jpg
22201-HAV.jpg
WST 503.jpg

这三个例子我需要的输出是:

39159
22201
WST 503

这是我当前的ereg_replace,但它也删除了数字前的前缀:

$number  = ereg_replace("[^0-9]", "", $value);

【问题讨论】:

  • 停止使用ereg_replace()。它已经过时了!

标签: php preg-replace ereg-replace


【解决方案1】:
<?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');
?>

快速而肮脏的脚本;-)

【讨论】:

    【解决方案2】:

    不推荐使用 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);
    

    此代码仅在前缀从不以数字开头时才能正常工作。但你明白了。

    【讨论】:

    • 这将在我的示例中留下“FLAN”、“HAV”等?我也需要删除它!所以它只是前缀+数字
    • 对不起,我认为“FLAN”和“HAV”也应该被提取为前缀,即使它们不是真正的“pre”修复。我改变了我的代码。现在你只能得到“真正的”前缀。
    • 谢谢 Rik,毫无疑问,这也可以,但我选择了 Kobi 的解决方案,因为它更简单。再次感谢!
    【解决方案3】:

    一种选择是删除最后一位数字之后的任何内容。如果名称中包含多个数字,这可能无法按预期工作:

    preg_replace("/\D+$/", "WST 503.jpg", "");
    

    另一个可能更强的选择是捕获第一个数字,以及它之前的任何内容:

    preg_match("/^\D*\d+/", "WST 503.jpg", $matches);
    print_r($matches);  // [0] => WST 503
    

    【讨论】:

      猜你喜欢
      • 2012-10-01
      • 2012-07-20
      • 2011-09-10
      • 2011-01-27
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多