Wildmat - Wildmat

Wildmat
Разработчики)Рич Зальц
ТипСопоставление с образцом

Wildmat это сопоставление с образцом библиотека разработана Рич Зальц. На основе синтаксис подстановочного знака уже используется в Оболочка Борна, wildmat предоставляет единый механизм сопоставления шаблонов в приложениях с более простым синтаксисом, чем тот, который обычно предлагается обычные выражения. При проверке совпадения шаблоны неявно привязываются к началу и концу каждой строки.

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

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

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

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

Примеры

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

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

Wildmat чаще всего встречается в NNTP реализации, такие как собственный ГОСТИНИЦА, также в несвязанном программном обеспечении, таком как GNU деготь и Передача инфекции. GNU tar заменил wildmat на POSIX fnmatch glob matcher в сентябре 1992 года. Ранняя версия содержала потенциальный доступ вне ограничений на незакрытых [.[2]

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

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

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

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

Рекомендации

  1. ^ Зальц, Рич (25 июня 2019 г.). "wildmat: древний классический инструмент сопоставления шаблонов wildmat; общественное достояние". Получено 25 ноября 2019.
  2. ^ Зальц, Рич (25 июня 2019 г.). "wildmat.c". Не может быть надежным перед лицом искаженных шаблонов; например, "foo [a-" может вызвать нарушение сегментации.
  3. ^ uwildmat (3) – Linux Библиотечные функции Руководство
  4. ^ "uwildmat.c в trunk / lib - ИНН". inn.eyrie.org. Получено 27 ноября 2019.
  5. ^ "git / git: wildmatch.c". GitHub.

внешняя ссылка