如何从字符串中提取和格式化特定值

时间:2019-03-28 19:22:58

标签: php

我们已经以特定格式将文件上传到我们的服务器,该格式指示版本和生成日期,例如: 5_5_61__20180828.dav

第一组数字代表版本5_5_61,最后一组数字代表构建日期20180828,然后.dav只是文件扩展名。

我们如何提取和格式化此文件名,使其看起来像这样:

Version: 5.5.61 Build Date: 08/28/2018

我一直在尝试此代码段的不同变体,但似乎找不到正确的方法:

$file = '5_5_61__20180828.dav';
echo substr($file, strpos($file , "_") + 1);

我应该注意,如果有一种更容易的方法,使用文件的不同命名约定来获得最终结果,我愿意更改文件名。

2 个答案:

答案 0 :(得分:3)

如果您知道版本和日期之间用__(两个下划线)分开,那就很简单了。

首先在__上分割字符串(两个下划线),这将为您提供版本以及带扩展名的日期。再次展开最后一部分,以将日期与扩展名分开。然后在您的版本中将_(下划线一个)替换为.,然后全部打印。

由于20180828不是strtotime()函数的标准日期格式,因此请使用DateTime::createFromFormat()创建日期对象。

$filename = '5_5_61__20180828.dav';
$parts = explode("__", $filename);
$parts2 = explode(".", $parts[1]);

$version = str_replce("_", ".", $parts[0]);
$date = $parts2[0];
$extension = $parts2[1];

$date = DateTime::createFromFormat("Ymd", $date)->format("m/d/Y");

echo "Version: $version. Build Date: $date";

答案 1 :(得分:1)

https://ideone.com/a5Vudv

$file = '5_5_61__20180828.dav';
$version =  str_replace("_", ".", substr($file, 0, -14));
$d = DateTime::createFromFormat("Ymd", substr($file, -12, 8))->format("m/d/Y");
echo 'Version: ' . $version . ' Build Date: '. $d;