wildmatch/README.md
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

49 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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