All checks were successful
Build / Build project (push) Successful in 26s
49 lines
3.5 KiB
Markdown
49 lines
3.5 KiB
Markdown
# wildmatch
|
||
|
||
*wildmatch — это библиотека C/C++ под лицензией BSD для сопоставления шаблонов в стиле git/rsync.*
|
||
|
||
## СИНТАКСИС
|
||
|
||
```c
|
||
/* 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](https://github.com/git/git/blob/maint/t/t3070-wildmatch.sh) из проекта [Git](https://git-scm.com).
|
||
|
||
Название «wildmatch» взято из внутренней библиотеки в [rsync](https://rsync.samba.org/), используемой для сопоставления в стиле `fnmatch`. Реализация wildmatch в Git первоначально пришла из rsync. Изначальную реализацию wildmatch добавил в rsync Уэйн Дэвисон (Wayne Davison) в 2003 году.
|
||
|
||
Набор тестов для wildmatch позаимствован из Git, однако сама библиотека не имеет общего происхождения с реализациями wildmatch ни в Git, ни в rsync.
|
||
|
||
Изначально wildmatch основывался на реализации `fnmatch` из OpenBSD. Эта реализация была расширена обратно совместимым образом — путём введения нового флага `WM_WILDSTAR` для включения расширенного синтаксиса.
|