wildmatch is a BSD-licensed C/C++ library for git/rsync-style pattern matching
Find a file
Alexander Zhirov 0b3baedbee
All checks were successful
Build / Build project (push) Successful in 26s
init 0.5.0
2025-09-18 03:12:25 +03:00
.forgejo/workflows Initial commit 2025-09-18 02:25:36 +03:00
files init 0.5.0 2025-09-18 03:12:25 +03:00
package.yml init 0.5.0 2025-09-18 03:12:25 +03:00
README.md init 0.5.0 2025-09-18 03:12:25 +03:00

wildmatch

wildmatch — это библиотека C/C++ под лицензией BSD для сопоставления шаблонов в стиле git/rsync.

СИНТАКСИС

/* C API */
#include <wildmatch/wildmatch.h>

if (wildmatch("/a/**/z", "/a/b/c/d/z", WM_WILDSTAR) == WM_MATCH) {
    /* matched */
}

/* C++ API */
#include <wildmatch/wildmatch.hpp>

if (wild::match("/a/**/z", "/a/b/c/d/z")) {
    /* matched */
}

ОПИСАНИЕ

wildmatch — это расширение функции fnmatch(3), определённой в POSIX 1003.2-1992, раздел B.6.

Расширение wildmatch позволяет ** сопоставлять символ /, когда установлен флаг WM_PATHNAME. Это даёт практическое преимущество: можно совпадать со всеми подкаталогами пути с помощью **, а одинарная звёздочка * при этом остается для сопоставления внутри компонентов пути.

C-API по умолчанию совместим с fnmatch. Расширение wildmatch включается передачей флага WM_WILDSTAR в flags. Задание WM_WILDSTAR неявно включает WM_PATHNAME.

В C++-API аргумент flags по умолчанию равен wild::WILDSTAR. Вызов wild::match(...) только с двумя аргументами будет по умолчанию использовать расширенный синтаксис.

Флаги WM_ названы так же, как соответствующие им FNM_ из fnmatch, и совпадают по поведению с fnmatch(3), если WM_WILDSTAR не задан.

КОД ВОЗВРАТА

C-API возвращает WM_MATCH, если строка совпала с шаблоном, и WM_NOMATCH, если не совпала. Эти значения определены как #define для 0 и 1 соответственно.

C++-API возвращает логическое значение: true (совпадение) или false (нет совпадения).

ИСТОРИЯ

Расширенный синтаксис wildmatch разрабатывался, ориентируясь на тесты wildmatch из проекта Git.

Название «wildmatch» взято из внутренней библиотеки в rsync, используемой для сопоставления в стиле fnmatch. Реализация wildmatch в Git первоначально пришла из rsync. Изначальную реализацию wildmatch добавил в rsync Уэйн Дэвисон (Wayne Davison) в 2003 году.

Набор тестов для wildmatch позаимствован из Git, однако сама библиотека не имеет общего происхождения с реализациями wildmatch ни в Git, ни в rsync.

Изначально wildmatch основывался на реализации fnmatch из OpenBSD. Эта реализация была расширена обратно совместимым образом — путём введения нового флага WM_WILDSTAR для включения расширенного синтаксиса.