дикий коврик
Разработчик(и) | Насыщенная соль |
---|---|
Тип | Сопоставление с образцом |
wildmat — это библиотека сопоставления шаблонов, разработанная Ричем Зальцем . Основываясь на синтаксисе подстановочных знаков, уже используемом в оболочке Bourne , wildmat обеспечивает единый механизм сопоставления шаблонов между приложениями с более простым синтаксисом, чем тот, который обычно предлагается регулярными выражениями . Шаблоны неявно привязываются к началу и концу каждой строки при проверке на совпадение.
В июне 2019 года Рич Зальц опубликовал оригинальную версию ныне несуществующей библиотеки на GitHub под статусом общественного достояния . [1]
Операции сопоставления с образцом
[ редактировать ]Существует пять операций сопоставления с образцом, кроме строгого взаимно однозначного соответствия между шаблоном и источником, который необходимо проверить на совпадение.
- Звездочка ( * ) соответствует любой последовательности из нуля или более символов.
- Вопросительный знак ( ? ), соответствующий любому отдельному символу.
- Набор указанных символов. Он указывается как список символов или как диапазон символов, где начало и конец диапазона разделены знаком минус (или тире), или как любая комбинация списков и диапазонов. Тире также может быть включено в набор как символ, если оно является началом или концом набора. Этот набор заключен в квадратные скобки. Закрывающую квадратную скобку (]) можно использовать в наборе, если это первый символ в наборе.
- Отрицание множества. Он указывается так же, как и набор, с добавлением символа каретки (^) в начале тестовой строки сразу внутри открытой квадратной скобки. (NNTP указывает альтернативу!. Реализация может быть настроена на любой вариант.)
- Символ обратной косой черты ( \ ), делающий недействительным специальное значение открытой квадратной скобки ([), звездочки, обратной косой черты или вопросительного знака. Две последовательные обратные косые черты приведут к оценке обратной косой черты как символа, не имеющего особого значения.
Примеры
[ редактировать ]- *foo* соответствует строке, содержащей «foo».
- mini* соответствует всему, что начинается с «mini» (включая саму строку «mini»).
- ?* соответствует любой строке из трех и более букв.
- [0-9a-zA-Z] соответствует каждому буквенно-цифровому символу ASCII .
- [^]-] соответствует символу, отличному от закрывающей квадратной скобки или тире.
Использование
[ редактировать ]wildmat чаще всего встречается в реализациях NNTP, Зальца таких как собственный INN , а также в несвязанном программном обеспечении, таком как GNU tar и Transmission . В сентябре 1992 года GNU tar заменил wildmat на средство сопоставления glob POSIX fnmatch. Ранняя версия содержала потенциальный внешний доступ к незакрытым файлам. [ . [2]
Исходная реализация байт-ориентированного шаблона не может обрабатывать многобайтовые наборы символов и создает проблемы, когда искомый текст может содержать несколько несовместимых наборов символов. Упрощенная версия wildmat, ориентированная на кодировку UTF-8, была разработана рабочей группой IETF NNTP. Это часть RFC 3977 (раздел 4), стандарт NNTP 2006 года.
В более новом INN, поддерживающем UTF-8, был добавлен uwildmat, который поддерживает все функции wildmat. Эта переработка 2000 года, выполненная Рассом Олбери, исправляет OOB в исходной реализации. Плотно накрученные циклы C были записаны на более мелкие инструкции. [3] [4]
Rsync включает в себя потомок wildmat под лицензией GPLv3, известный как wildmatch, модифицированный Уэйном Дэвисоном. Система контроля версий Git импортирует и использует его. Он не поддерживает UTF-8, но имеет исправленный OOB и дополнительную поддержку классов символов и звездочек (** для произвольной глубины). [5]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Зальц, Рич (25 июня 2019 г.). «wildmat: старый классический шаблон сопоставления шаблонов wildmat; общественное достояние» . Гитхаб . Проверено 25 ноября 2019 г.
- ^ Зальц, Рич (25 июня 2019 г.). "wildmat.c" . Гитхаб .
Может оказаться ненадежным перед лицом неверных шаблонов; например, «foo[a-» может вызвать нарушение сегментации.
- ^ Linux функциям библиотеки Руководство по –
- ^ «uwildmat.c в багажнике/библиотеке — INN» . inn.eyrie.org . Проверено 27 ноября 2019 г. .
- ^ "git/git: wildmatch.c" . Гитхаб . 16 февраля 2022 г.
Внешние ссылки
[ редактировать ]- Рич Зальц (4 апреля 1991 г.). «v17i079: wildmat-1.4 — средство сопоставления шаблонов в стиле /bin/sh, часть 01/01» . Группа новостей : comp.sources.misc . Usenet: [электронная почта защищена] .
- Рич Зальц (9 марта 1991 г.). «v17i034: wildmat — средство сопоставления шаблонов в стиле /bin/sh, часть 01/01» . Группа новостей : comp.sources.misc . Usenet: [электронная почта защищена] .