Documentation ¶
Overview ¶
Package glob implements a language for specifying glob patterns for path names starting at some root. The language does not follow the specs from filepath.Match but provides a superset which allows for directory wildcards.
Patterns consist of normal characters, non-separator wildcards '*' and '?', separators '/' and directory wildcards '**'.
A somewhat formal grammer can be given as:
pattern = term, { '/', term }; term = '**' | name; name = { charSpecial | group | escapedChar | '*' | '?' }; charSpecial = (* any unicode rune except '/', '*', '?', '[' and '\' *); char = (* any unicode rune *); escapedChar = '\\', char; group = '[', [ '^' ] { escapedChar | groupChar | range } ']'; groupChar = (* any unicode rune except '-' and ']' *); range = ( groupChar | escapedChar ), '-', (groupChar | escapedChar);
The format operators have the following meaning:
- any character (rune) matches the exactly this rune - with the following exceptions
- `/` works as a directory separator. It matches directory boundarys of the underlying system independently of the separator char used by the OS.
- `?` matches exactly one non-separator char
- `*` matches any number of non-separator chars - including zero
- `\` escapes a character's special meaning allowing `*` and `?` to be used as regular characters.
- `**` matches any number of nested directories. If anything is matched it always extends until a separator or the end of the name.
- Groups can be defined using the `[` and `]` characters. Inside a group the special meaning of the characters mentioned before is disabled but the following rules apply
- any character used as part of the group acts as a choice to pick from
- if the group's first character is a `^` the whole group is negated
- a range can be defined using `-` matching any rune between low and high inclusive
- Multiple ranges can be given. Ranges can be combined with choices.
- The meaning of `-` and `]` can be escacped using `\`
Index ¶
Constants ¶
const ( // Separator defines the path separator to use in patterns. This is always // a forward slash independently of the underlying's OS separator Separator = '/' // SingleWildcard defines the the single non-separator character wildcard // operator. SingleWildcard = '?' // AnyWildcard defines the the any number of non-separator characters // wildcard operator. AnyWildcard = '*' // Backslash escapes the next character's special meaning Backslash = '\\' // GroupStart starts a range GroupStart = '[' // GroupEnd starts a range GroupEnd = ']' // GroupNegate when used as the first character of a group negates the group. GroupNegate = '^' // Range defines the range operator Range = '-' )
Variables ¶
var ( // ErrBadPattern is returned when an invalid pattern is found. Make // sure you use errors.Is to compare errors to this sentinel value. ErrBadPattern = errors.New("bad pattern") )
Functions ¶
This section is empty.
Types ¶
type Pattern ¶
type Pattern struct {
// contains filtered or unexported fields
}
Pattern defines a glob pattern prepared ahead of time which can be used to match filenames. Pattern is safe to use concurrently.
func New ¶
New creates a new pattern from pat and returns it. It returns an error indicating any invalid pattern.
func (*Pattern) GlobFS ¶
GlobFS applies pat to all files found in fsys under root and returns the matching path names as a string slice. It uses fs.WalkDir internally and all constraints given for that function apply to GlobFS.
func (*Pattern) Match ¶
Match matches a file's path name f to the compiled pattern and returns whether the path matches the pattern or not.