2013-04-11 85 views
1

我使用水珠這種格式的時刻:glob模式匹配兩個日期同時

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

在/存儲/日誌文件,有數百個文本文件,所有的開始YYYY-MM-DD 。我想改變*.*在我的模式,而不是僅看當月和前一個月:

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

似乎我無法弄清楚是如何在一個語句做到這一點。我想我已經找到了如何做當月:

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

但我想辦法給它的所有組合成一個單獨的語句。感謝任何幫助,謝謝!

回答

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

'DateTime'的解決方案比我的平滑得多。我總是忘記那些奇特的新東西。 :D – 2013-04-11 12:49:11

+0

謝謝 - 完美的工作!感謝所有人發佈您的答案 - 真的很感激! – Jason 2013-04-11 13:01:23

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/ 玩得開心

+0

這不是他要 – Uby 2013-04-11 12:46:46

+0

這如何涉及到這個問題?該模式匹配目錄中的所有內容,不僅包括當前和上個月。 – 2013-04-11 12:47:14

+0

無論如何,它是其他職位的兩倍有用! +1 – hek2mgl 2013-04-11 12:49:07

0

在我看來,這是平臺(或殼)依賴。

的水珠()函數搜索根據由libc的水珠()函數,這是 類似於由普通殼使用的規則使用的規則匹配圖案 的所有路徑名。

請參見本附註: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

0

怎麼樣

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