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
для включения расширенного синтаксиса.