wildmat - это библиотека сопоставления с образцом, разработанная Ричем Зальцем . На основе синтаксиса подстановочных знаков, уже используемого в оболочке Bourne , подстановочные знаки обеспечивают единый механизм сопоставления шаблонов в приложениях с более простым синтаксисом, чем тот, который обычно предлагается регулярными выражениями . При проверке совпадения шаблоны неявно привязываются к началу и концу каждой строки.
Разработчики) | Рич Зальц |
---|---|
Тип | Сопоставление с образцом |
В июне 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, ориентированная на кодирование UTF-8 , была разработана рабочей группой IETF NNTP. Это часть RFC 3977 (раздел 4), стандарта 2006 года для NNTP.
В более новом INN, который поддерживает UTF-8, был добавлен uwildmat, который поддерживает все функции wildmat. Эта перезапись 2000 года, выполненная Рассом Олбери, исправляет OOB в исходной реализации. Плотно намотанные С-петли были записаны в более мелкие операторы. [3] [4]
Rsync включает лицензированный GPLv3 потомок wildmat, известный как wildmatch, модифицированный Уэйном Дэвисоном. Система контроля версий Git импортирует и использует его. Он не поддерживает UTF-8, но имеет фиксированный OOB и дополнительную поддержку для классов символов и звездочек (** для произвольной глубины). [5]
Смотрите также
Рекомендации
- ^ Зальц, Рич (25 июня 2019 г.). «wildmat: древний классический инструмент сопоставления шаблонов wildmat; общественное достояние» . Проверено 25 ноября 2019 года .
- ^ Зальц, Рич (25 июня 2019 г.). "wildmat.c" .
Не может быть надежным перед лицом искаженных шаблонов; например, "foo [a-" может вызвать нарушение сегментации.
- ^ Руководство по функциям библиотеки Linux -
- ^ "uwildmat.c в trunk / lib - ИНН" . inn.eyrie.org . Проверено 27 ноября 2019 года .
- ^ "git / git: wildmatch.c" . GitHub .
Внешние ссылки
- Рич Зальц (4 апреля 1991 г.). "v17i079: wildmat-1.4 - сопоставление с образцом в стиле a / bin / sh, часть 01/01" . Группа новостей : comp.sources.misc . Usenet: [email protected] .
- Рич Зальц (9 марта 1991 г.). "v17i034: wildmat - сопоставление с образцом в стиле a / bin / sh, часть 01/01" . Группа новостей : comp.sources.misc . Usenet: [email protected] .