【问题标题】:Exploding file name to find match分解文件名以查找匹配项
【发布时间】:2014-04-06 04:07:51
【问题描述】:

我正在寻找找出部分文件名的最佳方法。我正在组合一个应用程序,该应用程序需要能够分解文件名,然后根据该文件名的一部分查询数据库。让我举一些例子说明文件名是如何出现的。

Station-[_A]_Warren_2014-01-2614_40_01_377000.mp3
Fire_station_2014-02-1311_10_01_347000.mp3
FIRE_EMS_2014-03-0111_11_01_212000.mp3
Really_long_name_goes_here_2014-04-0123_12_01_177000.mp3

现在,我在扫描目录找到长文件名后的变量是$file。我需要找到一种方法来分解这些片段(我可以进行分解),但我需要一种很好的方法来帮助确定该文件名的“前面”。该文件名的前面定义为“YYYY-MM-DDHH 之前的任何内容”格式。

所以我猜测必须对此进行某种正则表达式或 pre_match ?

【问题讨论】:

  • 377000、347000、212000、177000是什么意思?
  • _2​​014 之后的所有内容都是日期/时间格式,一直到毫秒。所以 _2014-04-05-23_13_01_120000.mp3 是 2014 年 4 月 5 日 11:13:01:120000
  • 我想您想将其转换为时间戳以将其放入数据库中?
  • 那之前的部分呢,我的意思是 Station-[A]_Warren 和第一种情况一样。
  • 不 - 我想在 _2014 之前获得名称。对于此应用程序,该起始文件名与数据库中的某些内容“原样”匹配

标签: php regex explode


【解决方案1】:

您可以使用preg_match

preg_match('/(.*)(_\d{4}-\d+-\d+)_(.*)/', $file, $matches);

echo $matches[1];

【讨论】:

  • 谢谢安迪 - 看起来它会成功!我将不得不对其进行一些测试,但应该没问题!
  • 很好的答案。不过,没有必要声明 $matches
  • 哇!再次感谢安迪!我从来没有做过任何 preg_match,我曾经使用过 $matches[1] 以外的任何东西。这一次,我也可以使用 $matches[2] 和 $matches[3] 了:D
  • @RPM - 为了我自己的无知,为什么不呢?
  • int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ) 是通过引用传入的。因此,在preg_match 返回后,它可以在范围内访问。
猜你喜欢
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-23
  • 2022-12-11
  • 2014-04-09
相关资源
最近更新 更多