PHP glob()列出不以下划线开头的文件?

时间:2013-12-31 16:28:06

标签: php regex

标准的glob()函数用法类似于

$dir = glob("*.txt");
foreach ($dir as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}

使用*作为通配符,但是否有一种方法可以否定它以忽略以_something.txt开头的下划线的任何文件? 我试图避免使用像

这样的preg_match()
$dir = glob("*.txt");
foreach ($dir as $filename) {
    if (! preg_match("^_+", $filename, $match) { // doesn't show if 1st char is _
        echo "$filename size " . filesize($filename) . "\n";
    }
}

使用glob()自己的正则表达式来避免首先加载不必要的文件,假设这样会更快。

2 个答案:

答案 0 :(得分:12)

这就行了。

$dir = glob("[!_]*.txt");
foreach ($dir as $filename) {
    echo "$filename size " . filesize($filename) . "<br />";
}

答案 1 :(得分:6)

不需要正则表达式。

$files = array_filter(glob('*.txt'), function ($filename) {
  return $filename[0] != '_';
});