我正在读取单个目录中的所有文件,我想过滤JPG,JPEG,GIF和PNG.
大写和小写字母.这些是唯一可以接受的文件.
我目前正在使用这个:
$testPics = takeFiles($picsDir, "([^\s]+(?=\.(jpg|JPG|jpeg|JPEG|png|PNG|gif|GIF))\.\2)");
Run Code Online (Sandbox Code Playgroud)
而函数takeFiles看起来像这样:
function takerFiles($dir, $rex="") {
$dir .= "/";
$files = array();
$dp = opendir($dir);
while ($file = readdir($dp)) {
if ($file == '.') continue;
if ($file == '..') continue;
if (is_dir($file)) continue;
if ($rex!="" && !preg_match($rex, $file)) continue;
$files[] = $file;
}
closedir($dp);
return $files;
}
Run Code Online (Sandbox Code Playgroud)
它总是什么都不返回.所以我的正则表达式代码肯定有问题.
小智 33
我认为你的正则表达式有问题.首先尝试在这里测试正则表达式:https://www.regexpal.com/
我认为这个可能适合你:
/^.*\.(jpg|jpeg|png|gif)$/i
注意最后的/ i - 这是"不区分大小写"标志,省去了你必须输入所有排列:)
Era*_*rin 11
如何使用glob()代替?
$files = glob($dir . '*.{jpg,gif,png,jpeg}',GLOB_BRACE);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
44516 次 |
最近记录: |