1

嗨,我正在编写一个脚本来遍历当前目录并列出所有子目录一切正常,但我无法排除以 _ 开头的文件夹

<?php

$dir = __dir__;

// Open a known directory, and proceed to read its contents
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        echo("<ul>");
    while (($file = readdir($dh)) !== false) {
        if ($file == '.' || $file == '..' || $file == '^[_]*$' ) continue;
        if (is_dir($file)) {
            echo "<li> <a href='$file'>$file</a></li>";
        }
    }
    closedir($dh);
}
}
?>
4

4 回答 4

3

不需要正则表达式,使用$file[0] == '_'substr($file, 0, 1) == '_'

如果你确实想要一个正则表达式,你需要使用preg_match()来检查:preg_match('/^_/', $file)

于 2012-05-08T06:28:21.057 回答
3

您可以使用substr[docs] 之类的:

||  substr($file, 0, 1) === '_'
于 2012-05-08T06:29:39.433 回答
0

或者,如果你想使用正则表达式,你应该使用正则表达式函数,比如 preg_match: preg_match('/^_/', $file); 但正如ThiefMaster所说,在这种情况下$file[0] == '_'就足够了。

于 2012-05-08T06:32:51.553 回答
0

更优雅的解决方案是使用SPL。GlobIterator可以帮助您。每个项目都是SplFileInfo的一个实例。

<?php

$dir = __DIR__ . '/[^_]*';
$iterator = new GlobIterator($dir, FilesystemIterator::SKIP_DOTS);

if (0 < $iterator->count()) {
    echo "<ul>\n";
    foreach ($iterator as $item) {
        if ($item->isDir()) {
            echo sprintf("<li>%s</li>\n", $item);
        }
    }
    echo "</ul>\n";
}
于 2012-05-08T07:09:18.683 回答