GlobIterator 正则表达式

GlobIterator RegEx

我有一个末尾带有通配符的字符串,但我不知道该字符串会有多少个字符。如何使用 GlobIterator 和 RegexIterator 来匹配相似的文件名?第二个匹配 returns 目录中的所有文件,但我不希望这样。我需要一个正确的正则表达式。我不想匹配扩展名之前的最后一组(例如文件大小为 250M、500M 等)

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

匹配

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

这是 returns 正确的文件。

/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.*

Returns 个文件:

/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

您应该在 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";
}