On Sunday, 17 September 2017 at 08:37:33 UTC, Ky-Anh Huynh wrote:

The official documentation here https://dlang.org/phobos/std_path.html#.globMatch refers to the wiki page https://en.wikipedia.org/wiki/Glob_%28programming%29 . However I think the popular glob rules (man 7 glob) are not supported.

The problem with matching "[0123456789]*" is that it will match files like "1blah" and "8stuff". It looks like glob patterns are not robust enough to handle match patterns you want. A regex would probably be enough. Something like this works:

string[] getProcNumbers() {
        import std.file : dirEntries, SpanMode;
        import std.path : baseName;
        import std.regex : regex, match;
        import std.algorithm : map, filter;
        import std.array : array;

        auto r = regex(`^/proc/[0-9]*$`);

        string[] entries =
                dirEntries("/proc/", SpanMode.shallow)
                .map!(n => n.name)
                .filter!(n => match(n, r))
                .array();

        return entries;
}

int main() {
        import std.stdio : stdout;

        foreach (entry ; getProcNumbers()) {
                stdout.writefln("%s", entry);
        }

        return 0;
}

Reply via email to