Введение
Библиотека сопоставления шаблонов, разработанная Ричем Сальцем. wildmat — это библиотека сопоставления шаблонов, разработанная Ричем Сальцем. Основываясь на синтаксисе подстановочных знаков, уже используемом в оболочке Bourne, wildmat предоставляет единый механизм сопоставления шаблонов в различных приложениях с более простым синтаксисом, чем обычно используется в регулярных выражениях. При проверке соответствия шаблоны неявно привязаны к началу и концу каждой строки. В июне 2019 года Рич Сальц опубликовал исходную версию библиотеки, которая больше не поддерживается, на GitHub под лицензией, передающей её в общественное достояние.
wildmat is a pattern matching library developed by Rich Salz. Based on the wildcard syntax already used in the Bourne shell, wildmat provides a uniform mechanism for matching patterns across applications with simpler syntax than that typically offered by regular expressions. Patterns are implicitly anchored at the beginning and end of each string when testing for a match. In June 2019, Rich Salz released the original version of the now defunct library on GitHub under a public domain dedication.
Операции сопоставления образцов
Существует пять операций сопоставления с образцом, помимо строгого соответствия один к одному между образцом и проверяемым источником. Звездочка (*) соответствует любой последовательности из нуля или более символов. Знак вопроса (?) соответствует любому одиночному символу. Набор указанных символов. Он задается как список символов или как диапазон символов, где начало и конец диапазона разделены знаком минус (или дефисом), или как любая комбинация списков и диапазонов. Дефис также может быть включен в набор как символ, если он является первым или последним символом в наборе. Этот набор заключен в квадратные скобки. Закрывающая квадратная скобка (]) может быть использована в наборе, если она является первым символом в наборе. Отрицание набора. Он задается так же, как и набор, с добавлением символа каретки (^) в начале строки тестирования сразу после открывающей квадратной скобки. (NNTP определяет альтернативный вариант – восклицательный знак (!). Реализация может быть настроена на использование любого из этих вариантов.) Обратная косая черта (\) используется для отмены специального значения открывающей квадратной скобки ([), звездочки, обратной косой черты или знака вопроса. Две последовательные обратные косые черты приводят к тому, что обратная косая черта интерпретируется как символ без специального значения.
Примеры
*foo* соответствует строке, содержащей "foo". mini* соответствует любой строке, начинающейся с "mini" (включая саму строку "mini"). ? ?? * соответствует любой строке из трех и более символов. [0-9a-zA-Z] соответствует любому алфавитно-цифровому символу ASCII. [^]] соответствует символу, отличному от закрывающей квадратной скобки или дефиса.
Использование
wildmat чаще всего встречается в реализациях NNTP, таких как INN, разработанная самим Salz, а также в несвязанном программном обеспечении, например GNU tar и Transmission. В сентябре 1992 года GNU tar заменила wildmat на сопоставление шаблонов fnmatch, соответствующее стандарту POSIX. Ранняя версия содержала потенциальную ошибку выхода за границы выделенной памяти. Оригинальная байт-ориентированная реализация wildmat не способна обрабатывать многобайтовые кодировки и вызывает проблемы, когда искомый текст может содержать несколько несовместимых наборов символов. Рабочая группа IETF NNTP разработала упрощенную версию wildmat, ориентированную на кодировку UTF-8. Она является частью (раздел 4) стандарта NNTP 2006 года. В более новой версии INN, поддерживающей UTF-8, был добавлен "uwildmat", который поддерживает все возможности wildmat. Эта переработка 2000 года, выполненная Рассом Олберри, устраняет ошибку выхода за границы памяти в оригинальной реализации. Сложные циклы на C были разбиты на более простые операторы. Rsync включает в себя потомка wildmat, лицензированного по GPLv3 и известного как wildmatch, модифицированного Уэйном Дэвисоном. Система контроля версий Git импортирует и использует его. Он не поддерживает UTF-8, но в нем исправлена ошибка выхода за границы памяти и добавлена поддержка классов символов и шаблонов с использованием двойной звездочки ( ** ) для произвольной глубины вложенности.
The original byte oriented wildmat implementation is unable to handle multibyte character sets, and poses problems when the text being searched may contain multiple incompatible character sets. A simplified version of wildmat oriented toward UTF 8 encoding has been developed by the IETF NNTP working group. It is a part of (section 4), the 2006 standard for NNTP. In the newer INN which supports UTF 8, a "uwildmat" was added which supports all the features of wildmat. This 2000 rewrite, performed by Russ Allbery, fixes the OOB in the original implementation. Tightly wound C loops were written out into smaller statements. Rsync includes a GPLv3 licensed wildmat descendant known as wildmatch, modified by Wayne Davison. The Git version control system imports and makes use of it. It does not support UTF 8, but has the OOB fixed and has additional support for character classes and star globs (** for arbitrary depth).