facil.io

#Glob Matching

c
#define FIO_GLOB_MATCH
#include "fio-stl.h"

Binary glob matching for wildcard patterns. Bytes in, bytes out — no UTF-8 awareness, no allocation, just *, ?, [...], and escapes.

#API Functions

#fio_glob_match

c
SFUNC uint8_t fio_glob_match(fio_str_info_s pattern, fio_str_info_s string);

Returns 1 if string matches pattern, otherwise 0.

#Supported Patterns

#*

Matches any byte sequence, including an empty one.

#?

Matches any single byte.

#[...]

Matches any single byte inside the brackets. Ranges work with -, e.g. [a-z]. The first character may be ] without closing the class. Use \ to escape ], -, and \ itself.

#[!...] or [^...]

Inverted character class: matches any single byte not in the brackets.

#\

Escapes the next character so it is matched literally.

#Example

c
#define FIO_GLOB_MATCH
#define FIO_STR
#include "fio-stl.h"

int main(void) {
  printf("%d\n", fio_glob_match(FIO_STR_INFO1("*.txt"),
                                FIO_STR_INFO1("notes.txt")));      /* 1 */
  printf("%d\n", fio_glob_match(FIO_STR_INFO1("log_????"),
                                FIO_STR_INFO1("log_2024")));       /* 1 */
  printf("%d\n", fio_glob_match(FIO_STR_INFO1("[!0-9]*"),
                                FIO_STR_INFO1("abc123")));         /* 1 */
  printf("%d\n", fio_glob_match(FIO_STR_INFO1("file\\*"),
                                FIO_STR_INFO1("file*")));          /* 1 */
  return 0;
}