Poco

class Glob

Library: Foundation
Package: Filesystem
Header: Poco/Glob.h

Description

This class implements glob-style pattern matching as known from Unix shells.

In the pattern string, '*' matches any sequence of characters, '?' matches any single character, [SET] matches any single character in the specified set, [!SET] matches any character not in the specified set.

A set is composed of characters or ranges; a range looks like character hyphen character (as in 0-9 or A-Z). [0-9a-zA-Z_] is the set of characters allowed in C identifiers. Any other character in the pattern must be matched exactly.

To suppress the special syntactic significance of any of '[]*?!-\', and match the character exactly, precede it with a backslash.

All strings are assumed to be UTF-8 encoded.

Member Summary

Member Functions: collect, glob, isDirectory, match, matchAfterAsterisk, matchSet

Enumerations

Options

Flags that modify the matching behavior.

GLOB_DEFAULT = 0x00

default behavior

GLOB_DOT_SPECIAL = 0x01

'*' and '?' do not match '.' at beginning of subject

GLOB_FOLLOW_SYMLINKS = 0x02

follow symbolic links

GLOB_CASELESS = 0x04

ignore case when comparing characters

GLOB_DIRS_ONLY = 0x80

only glob for directories (for internal use only)

Constructors

Glob

Glob(
    const std::string & pattern,
    int options = 0
);

Creates the Glob, using the given pattern. The pattern must not be an empty string.

If the GLOB_DOT_SPECIAL option is specified, '*' and '?' do not match '.' at the beginning of a matched subject. This is useful for making dot-files invisible in good old Unix-style.

Destructor

~Glob

~Glob();

Destroys the Glob.

Member Functions

glob static

static void glob(
    const std::string & pathPattern,
    std::set < std::string > & files,
    int options = 0
);

Creates a set of files that match the given pathPattern.

The path may be give in either Unix or Windows syntax and is automatically expanded by calling Path::expand().

The pattern may contain wildcard expressions even in intermediate directory names (e.g. /usr/include/*/*.h).

Note that, for obvious reasons, escaping characters in a pattern with a backslash does not work in Windows-style paths.

Directories that for whatever reason cannot be traversed are ignored.

glob static

static void glob(
    const char * pathPattern,
    std::set < std::string > & files,
    int options = 0
);

Creates a set of files that match the given pathPattern.

The path may be give in either Unix or Windows syntax and is automatically expanded by calling Path::expand().

The pattern may contain wildcard expressions even in intermediate directory names (e.g. /usr/include/*/*.h).

Note that, for obvious reasons, escaping characters in a pattern with a backslash does not work in Windows-style paths.

Directories that for whatever reason cannot be traversed are ignored.

glob static

static void glob(
    const Path & pathPattern,
    std::set < std::string > & files,
    int options = 0
);

Creates a set of files that match the given pathPattern.

The pattern may contain wildcard expressions even in intermediate directory names (e.g. /usr/include/*/*.h).

Note that, for obvious reasons, escaping characters in a pattern with a backslash does not work in Windows-style paths.

Directories that for whatever reason cannot be traversed are ignored.

glob static

static void glob(
    const Path & pathPattern,
    const Path & basePath,
    std::set < std::string > & files,
    int options = 0
);

Creates a set of files that match the given pathPattern, starting from basePath.

The pattern may contain wildcard expressions even in intermediate directory names (e.g. /usr/include/*/*.h).

Note that, for obvious reasons, escaping characters in a pattern with a backslash does not work in Windows-style paths.

Directories that for whatever reason cannot be traversed are ignored.

match

bool match(
    const std::string & subject
);

Matches the given subject against the glob pattern. Returns true if the subject matches the pattern, false otherwise.

collect protected static

static void collect(
    const Path & pathPattern,
    const Path & base,
    const Path & current,
    const std::string & pattern,
    std::set < std::string > & files,
    int options
);

isDirectory protected static

static bool isDirectory(
    const Path & path,
    bool followSymlink
);

match protected

bool match(
    TextIterator & itp,
    const TextIterator & endp,
    TextIterator & its,
    const TextIterator & ends
);

matchAfterAsterisk protected

bool matchAfterAsterisk(
    TextIterator itp,
    const TextIterator & endp,
    TextIterator its,
    const TextIterator & ends
);

matchSet protected

bool matchSet(
    TextIterator & itp,
    const TextIterator & endp,
    int c
);