glob模式同时匹配两个日期

时间:2013-04-11 12:36:06

标签: php date glob

我现在正在以这种格式使用glob:

glob('/STORAGE/LOGFILES/*.*')

在/ STORAGE / LOGFILES中,有数百个文本文件都以YYYY-MM-DD开头。我想将我的模式中的*.*更改为仅查看当前月份和上个月:

glob('/STORAGE/LOGFILES/2013-04*')
glob('/STORAGE/LOGFILES/2013-03*')

我似乎无法弄清楚如何在一个声明中做到这一点。我想我已经想出了如何做当月:

glob('/STORAGE/LOGFILES/'.date("Y-m").'*')

但是我想要一种方法将它们组合成一个单独的语句。感谢任何帮助,谢谢!

4 个答案:

答案 0 :(得分:2)

您可以使用GLOB_BRACE这样的选项:

$now = new DateTime();
$lastMonth = new DateTime('-1 month');
$monthList = $now->format('Y-m').','.$lastMonth->format('Y-m');
$pattern = '/STORAGE/LOGFILES/{'.$monthList.'}*';
glob($pattern, GLOB_BRACE);

答案 1 :(得分:0)

试试这段代码

glob('/STORAGE/LOGFILES/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]*')

您可以使用glob模式:http://cowburn.info/2010/04/30/glob-patterns/ 玩得开心

答案 2 :(得分:0)

在我看来,平台(或shell)依赖。

  

glob()函数搜索匹配模式的所有路径名   根据libc glob()函数使用的规则,即   类似于常见shell使用的规则。

请参阅此说明:http://www.php.net/manual/en/function.glob.php#110340

<?php

$a = glob('/path/*{foo,bar}.dat',GLOB_BRACE);
print_r($a);

?>

Result : 
Array
(
    [0] => /path/file_foo.dat
    [1] => /path/file_foobar.dat
    [2] => /path/file_foobar.dat
)

也许你可以试试'|'还是签了?

它不支持正则表达式:http://www.php.net/manual/en/function.glob.php#88250

答案 3 :(得分:0)

怎么样

glob('/STORAGE/LOGFILES/'.date("Y").'-{'.date("m").','.date("m")-1.'}*',GLOB_BRACE)