|
All checks were successful
Build / Build project (push) Successful in 26s
|
||
|---|---|---|
| .forgejo/workflows | ||
| files | ||
| package.yml | ||
| README.md | ||
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 для включения расширенного синтаксиса.