php - 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
解决方案
您应该在 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";
}
推荐阅读
- r - 计算传递闭包的时间
- regex - 我的 URL 正则表达式不完美,如何修复并使组可选?
- javascript - 使用来自另一个对象的键在新对象中使用
- shell - rc.local python 脚本无关错误:“getrandom 表示 ...”
- node.js - 当一个模块位于另一个模块的父目录中时,如果模块之间存在循环依赖关系,则导入的模块未定义
- excel - excel公式帮助计算指定日期之间的唯一日期
- javascript - 如何从 Component 容器中设置 React 组件的样式?
- kubernetes - 将裸机 kubernetes 集群暴露在互联网上
- node.js - Express.js POST 在 IIS 上返回 404
- sql - 编写 SQL 查询以从多个表中返回数据