GloBIterator RegEx - PullRequest
       4

GloBIterator RegEx

0 голосов
/ 02 октября 2018

У меня есть строка с подстановочным знаком в конце, но я не знаю, сколько символов будет в этой строке.Как я могу использовать GlobIterator и RegexIterator для сопоставления имен файлов, которые похожи?Второе совпадение возвращает все файлы из каталога, но я этого не хочу.Мне нужно правильное регулярное выражение.Я не хочу сопоставлять последний набор перед расширением (например, файлы размером 250M, 500M и т. Д.)

$iterator = new GlobIterator($this->srcDir . $identifier . ".*");

MATCH ON

/var/www/import/2014047-0216/YukonGold.A2014047.1620.721.*

Возвращает правильные файлы.

/var/www/import/2014047-0216/YukonGold.A2014047.1620.721.250m.jpg
/var/www/import/2014047-0216/YukonGold.A2014047.1620.721.500m.jpg

MATCH ON

/var/www/import/2014047-0216/YukonGold.A2014047.1620.*

Возвращает файлы:

/var/www/import/2014047-0216/YukonGold.A2014047.1620.250m.jpg
/var/www/import/2014047-0216/YukonGold.A2014047.1620.500m.jpg
/var/www/import/2014047-0216/YukonGold.A2014047.1620.721.250m.jpg
/var/www/import/2014047-0216/YukonGold.A2014047.1620.721.500m.jpg

ОЖИДАЕМЫЙ ВЫХОД

/ var / www / import / 2014047-0216 / YukonGold.A2014047.1620.721. *

/var/www/import/2014047-0216/YukonGold.A2014047.1620.721.250m.jpg
/var/www/import/2014047-0216/YukonGold.A2014047.1620.721.500m.jpg

/ var / www / import / 2014047-0216 /YukonGold.A2014047.1620. *

/var/www/import/2014047-0216/YukonGold.A2014047.1620.250m.jpg
/var/www/import/2014047-0216/YukonGold.A2014047.1620.500m.jpg

1 Ответ

0 голосов
/ 02 октября 2018

Вы должны использовать его внутри RegexIterator:

// Notice that there is no expansion pattern used here
$path = '/var/www/import/2014047-0216/YukonGold.A2014047.1620.';
$re = '~\Q' . $path . '\E(?:[^.]+\.)?\w+$~';
$regexIterator = new RegexIterator(new GlobIterator("{$path}*"), $re);
foreach ($regexIterator as $filename) {
    echo $filename . "\n";
}
...