wildmat

Библиотека сопоставления образцов, разработанная Ричем Сальцем
wildmat
Разработчик(и)Рич Сальц
ТипСопоставление с образцом

wildmat — это библиотека сопоставления шаблонов, разработанная Ричем Сальцем . Основанная на синтаксисе подстановочных знаков, который уже использовался в оболочке Bourne , wildmat обеспечивает единый механизм сопоставления шаблонов в приложениях с более простым синтаксисом, чем тот, который обычно предлагают регулярные выражения . Шаблоны неявно прикрепляются в начале и конце каждой строки при проверке на соответствие.

В июне 2019 года Рич Сальц опубликовал оригинальную версию ныне несуществующей библиотеки на GitHub в рамках передачи в общественное достояние . [1]

Операции сопоставления с образцом

Помимо строгого однозначного соответствия между шаблоном и источником, проверяемым на совпадение, существует пять операций сопоставления с образцом.

  • Звездочка ( * ) соответствует любой последовательности из нуля или более символов.
  • Вопросительный знак ( ? ) соответствует любому отдельному символу.
  • Набор указанных символов. Он указывается как список символов или как диапазон символов, где начало и конец диапазона разделены знаком минус (или тире), или как любая комбинация списков и диапазонов. Тире также может быть включено в набор как символ, если оно является началом или концом набора. Этот набор заключен в квадратные скобки. Закрывающая квадратная скобка (]) может использоваться в наборе, если это первый символ в наборе.
  • Отрицание множества. Оно указывается так же, как и множество, с добавлением символа вставки (^) в начале тестовой строки, прямо внутри открытой квадратной скобки. (NNTP указывает альтернативу !. Реализацию можно настроить на выполнение любого из этих вариантов.)
  • Символ обратной косой черты ( \ ) для аннулирования специального значения открытой квадратной скобки ([), звездочки, обратной косой черты или вопросительного знака. Два обратных слеша подряд приведут к оценке обратной косой черты как символа без специального значения.

Примеры

  • *foo* соответствует строке, содержащей «foo».
  • mini* соответствует всему, что начинается с «mini» (включая саму строку «mini»).
  • ???* соответствует любой строке из трех и более букв.
  • [0-9a-zA-Z] соответствует каждому отдельному буквенно-цифровому символу ASCII .
  • [^]-] соответствует символу, отличному от закрывающей квадратной скобки или тире.

Использование

wildmat чаще всего встречается в реализациях NNTP , таких как собственный INN Зальца , а также в неродственном программном обеспечении, таком как GNU tar и Transmission . GNU tar заменил wildmat на POSIX fnmatch glob matcher в сентябре 1992 года. Ранняя версия содержала потенциальный доступ за пределы диапазона для незакрытых [ . [2]

Исходная реализация wildmat, ориентированная на байты, не может обрабатывать многобайтовые наборы символов и создает проблемы, когда искомый текст может содержать несколько несовместимых наборов символов. Упрощенная версия wildmat, ориентированная на кодировку UTF-8, была разработана рабочей группой IETF NNTP. Она является частью RFC  3977 (раздел 4), стандарта 2006 года для NNTP.

В новой версии INN, которая поддерживает UTF-8, был добавлен "uwildmat", который поддерживает все возможности wildmat. Эта переделка 2000 года, выполненная Рассом Олбери, исправляет OOB в исходной реализации. Плотно закрученные циклы C были записаны в меньшие операторы. [3] [4]

Rsync включает в себя потомка wildmat с лицензией GPLv3, известного как wildmatch, модифицированного Уэйном Дэвисоном. Система контроля версий Git импортирует и использует его. Он не поддерживает UTF-8, но имеет фиксированный OOB и дополнительную поддержку для классов символов и звездных глобусов (** для произвольной глубины). [5]

Смотрите также

Ссылки

  1. ^ Salz, Rich (25 июня 2019 г.). "wildmat: старинный классический сопоставитель шаблонов wildmat; общественное достояние". GitHub . Получено 25 ноября 2019 г. .
  2. ^ Salz, Rich (25 июня 2019 г.). "wildmat.c". GitHub . Может оказаться ненадёжным при наличии неправильно сформированных шаблонов; например, "foo[a-" может вызвать нарушение сегментации.
  3. ^ uwildmat(3)  –  Руководство по функциям библиотеки Linux
  4. ^ "uwildmat.c в trunk/lib – INN". inn.eyrie.org . Получено 27 ноября 2019 г. .
  5. ^ "git/git: wildmatch.c". GitHub . 16 февраля 2022 г.
  • Рич Зальц (4 апреля 1991 г.). «v17i079: wildmat-1.4 — средство сопоставления шаблонов в стиле /bin/sh, часть 01/01». Группа новостей : comp.sources.misc. Usenet: 4 апреля 1991 г.,  034350.3923@sparky.IMD.Sterling.COM.
  • Rich Salz (9 марта 1991 г.). "v17i034: wildmat - сопоставитель шаблонов в стиле /bin/sh, часть 01/01". Группа новостей : comp.sources.misc. Usenet:  1991Mar9.044016.2409@sparky.IMD.Sterling.COM.
Взято с "https://en.wikipedia.org/w/index.php?title=Wildmat&oldid=1072127464"