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

use*_*300 3 php regex

标准的glob()函数用法就像

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

使用*作为通配符,但有没有办法否定它来忽略任何以下划线开头的文件,如_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";
    }
}
Run Code Online (Sandbox Code Playgroud)

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

小智 12

这样就行了.

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

  • 以下是 glob() 模式中特殊字符的汇编:http://cowburn.info/2010/04/30/glob-patterns/ (2认同)
  • @ComFreek感谢您的模式链接,无法在官方的php.net上找到,有一个伟大的新Yeark! (2认同)

Thi*_*ter 6

不需要正则表达式.

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