glob()有否定吗?

ale*_*lex 13 php glob

我知道我能做到这一点......

glob('/dir/somewhere/*.zip');
Run Code Online (Sandbox Code Playgroud)

...以获取所有文件结尾.zip,但有没有办法返回所有 ZIP 文件?

或者我应该迭代并过滤掉那个扩展名?

Atl*_*tli 25

你可以尝试这样的事情:

$all = glob('/dir/somewhere/*.*');
$zip = glob('/dir/somewhere/*.zip');
$remaining = array_diff($all, $zip);
Run Code Online (Sandbox Code Playgroud)

虽然,使用Pascal提到的其他方法之一可能更有效.


sal*_*the 16

一个快速的方法是glob()用于所有内容并使用preg_grep()过滤掉您不想要的文件.

preg_grep('#\.zip$#', glob('/dir/somewhere/*'), PREG_GREP_INVERT)
Run Code Online (Sandbox Code Playgroud)

另请参阅PHP中的文件匹配全局模式


Gor*_*don 9

这种模式将起作用:

glob('/dir/somewhere/*.{?,??,[!z][!i][!p]*}', GLOB_BRACE);
Run Code Online (Sandbox Code Playgroud)

它在/ dir/somewhere /以一个点后面的任何一个中找到所有内容

  • 一个字符(?)
  • 或两个字符(??)
  • 或者任何不以连续字母z,i,p([!z][!i][!p]*)开头的东西

  • *以上是否可以与大括号混合?*是的,它可以.例如,`*.{?,??,[!z] [!i] [!p]*}` (2认同)

Pas*_*TIN 8

我不认为glob可以做一个"非通配符"......

我看到至少有两个其他解决方案: