У меня есть несколько сотен тысяч файлов из нескольких разных источников. Каждый из файлов имеет дату в имени, однако структура имени файла отличается, например:
2015-10-05-importsrc1.txt
20151004importsrc2.txt
importsrc3-154826-4521-2015-10-06.csv
importsrc4-154826-4521-20151006.txt
Мне нужно иметь дело с файлами текущего месяца и в следующем месяце, игнорируя любые старые файлы.
Я видел несколько примеров того, как проверять определенные файлы с помощью циклов, чтобы проверить требуемую дату, но я стараюсь избегать слишком большого числа циклов и потенциально использовать регулярное выражение для соответствия совпадению даты и затем выполнить сравнение.
В настоящее время я использую следующее (где $f
- имя файла и расширение):
//CHANGED THIS TO SKIP OLD ONES
if(strpos(str_replace("-", "", $f), "201510") == false)
{
continue;
}
Но это работает только в предыдущем месяце и в настоящее время жестко закодировано, в идеале мне нужно что-то вроде:
//CHANGED THIS TO SKIP OLD ONES
$extractedDate = preg_match('DATEPATTERN',(str_replace("-", "", $f), "201510"),$extractedDate );
if(strtotime($extractedDate[0]) < date('Y-m-d',(strtotime ('-1 Month', strtotime (date('Y-m-d)))))
{
continue;
}
Я знаю, что могу просто изменить свою первую попытку, добавить еще одно условие и сделать его динамичным, но если бы я смог извлечь дату, это помогло бы во многих отношениях.
Я не смог найти что-либо в Интернете о том, как это сделать. Кажется, нет точной науки. Используя комментарии выше, у меня есть следующее регулярное выражение, которое работает для соответствия указанным файлам:
$re = '/(\d{8})|([0-9]{4}-[0-9]{2}-[0-9]{2})|([0-9]{2}-[0-9]{2}-[0-9]{4})/';
$str = "20151001-importsrc1.txt";
$str = "2015-10-01-importsrc1.txt";
$str = "01-10-2015-importsrc1.txt";
$str = "importsrc1-2015-10-01.txt";
$str = "importsrc1-01102015.txt";
$str = "importsrc1-01-10-2015.txt";
preg_match($re, $str, $matches);
$date = str_replace("-", "", $matches[0]);
print_r($date);
Существует три шаблона для соответствия 20151001
, 01102015
, 2015-10-01
, 01-10-2015
. Отсюда я смогу сравнить дату.
Это, конечно, не окончательный ответ, но может помочь кому-то в будущем.
201510
и2015-11
как подстроки в именах файлов? Что-то вроде2015[ -]?1[10]
?