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]
Смотрите также
Рекомендации
- ^ Зальц, Рич (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].