首页 > 解决方案 > GlobIterator 正则表达式

问题描述

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

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

比赛开始

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

标签: phpregexlaravelglobphp-7.2

解决方案


您应该在 a 中使用它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";
}

推荐阅读