【问题标题】:best advice to catch file name and match捕获文件名和匹配的最佳建议
【发布时间】:2014-01-26 19:50:19
【问题描述】:

所以我需要一些关于如何捕获文件名及其结构的建议。让我稍微解释一下。一个软件会将一个 mp3 文件上传到一个目录中。该 mp3 文件将始终保持与此非常相似的格式:

Station-[_A]_Warren_2014-01-2614_40_01_377000.mp3

任何正确的东西,包括 2014 年,通常都会保持不变。当然 Year-Month-DayHour-Minute-Second-Milliseconds.mp3 会随着时间的推移而变化。但我需要能够做的是抓住 2014 年(年)之前的任何事情,以及最好的方法。

我可以炸开“_”,但这确实不能按我的需要工作,因为如果我查看 $array[x] = 2014,2014 的位置可能会有所不同。一次可能位于位置 2,或者下一次可能位于位置 8,这取决于用户如何构建文件名,因为软件会将特殊字符重写为下划线。

所以我需要找出捕捉 2014 年的最佳方法。有什么想法吗?

【问题讨论】:

  • 但是你可以使用explode()'_2014'
  • 好点!可能性! :)

标签: php regex preg-replace preg-match preg-match-all


【解决方案1】:

最严格的方法是使用这个正则表达式:

^(.*?)\d{4}-\d{2}-\d{4}_\d{2}_\d{2}_\d{6}\.mp3

结果将在第一个捕获组中。

正则表达式仅假定日期的格式是固定的。即使名称中包含一些数字,它也能正常工作。


或者,如果您可以假设日期时间的格式是一致的,您可以只做一个取自 (0, length - 29) 的子字符串。

【讨论】:

  • 我会在这里试一试。快速提问。这也会捕获任何下划线或特殊字符,例如 []?
  • @MrTechie:除了一些控制字符(可能还有行分隔符),正则表达式会捕捉到任何扔给它的东西。
  • 所以使用pre_match,我能够发现文件名匹配,如何提取文件名的开头部分?
  • substr 方法似乎是最好的。甚至没有想到这一点。谢谢nhahtdh!
猜你喜欢
  • 2018-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 2014-03-28
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
相关资源
最近更新 更多