Skip to main content

match & imatch

The match expression performs a glob-style match against the basename of the file, evaluating true if the match is successful.

["match", "*.txt"]

You may optionally provide a third argument to change the scope of the match from the basename to the wholename of the file.

["match", "*.txt", "basename"]
["match", "dir/*.txt", "wholename"]

Case sensitivity

match is case sensitive; for case insensitive matching use imatch instead; it behaves identically to match except that the match is performed ignoring case.

Since 2.9.9.

On systems where the watched root is a case insensitive filesystem (this is the common case for macOS and Windows), match is equivalent to imatch.

Since 4.7.

You can override the case sensitivity of all name matching operations used in the query by setting the case_sensitive field in your query.

wildmatch

Since 3.7.

The match expression has been enhanced as described below. The capability name associated with this enhanced functionality is wildmatch.

If you want to recursively match all files under a directory, use the ** glob operator along with the wholename scope:

["match", "src/**/*.java", "wholename"]

By default, paths whose names start with . are not included. To change this behavior, you may optionally provide a fourth argument containing a dictionary of flags:

["match", "*.txt", "basename", {"includedotfiles": true}]

By default, backslashes in the pattern escape the next character, so \* matches a literal * character. To change this behavior so backslashes are treated literally, set the noescape flag to true in the flags dictionary. (Note that \\ is a literal \ in JSON notation):

["match", "*\\*.txt", "filename", {"noescape": true}]

matches a\b.txt.