Кіріспе
Рич Салц әзірлеген үлгілерді сәйкестендіру кітапханасы – wildmat. 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.
Үлгілерді сәйкестендіру операциялары
Үлгі мен тексерілетін дерек көзі арасындағы қатаң бір-бірге сәйкестіктен басқа бес үлгі сәйкестіру операциясы бар. Жұлдызша (*) – нөл немесе одан көп таңбадан тұратын кез келген тізбекті сәйкестіреді. Сұрақ белгісі (?) – кез келген бір таңбаға сәйкес келеді. Белгілі таңбалар жиынтығы. Ол таңбалар тізімі түрінде немесе диапазон түрінде беріледі, онда диапазонның басы мен соңы минус (немесе тире) таңбасымен бөлінеді, немесе тізімдер мен диапазонның кез келген комбинациясы түрінде ұсынылуы мүмкін. Тире жиынның басында немесе соңында болса, оны жиынға таңба ретінде қосуға болады. Бұл жиын квадрат жақшалармен қоршалған. Егер жабық квадрат жақша (]) жиынның бірінші таңбасы болса, оны қолдануға болады. Жиынның жоғарылатылуы (терістелуі). Ол жиын сияқты беріледі, бірақ ашық квадрат жақшаның ішіндегі сынақ тізбегінің басында caret белгісі (^) қосылады. (NNTP басқа нұсқаны көрсетеді. Жүйені екі бағытта да жұмыс істеуге конфигурациялауға болады.) Кері сызық (\) таңбасы – ашық квадрат жақшаның ([), жұлдызшаның, кері сызықтың немесе сұрақ белгісінің арнайы мағынасын жоққа шығарады. Екі кері сызық тізбегінде пайда болса, кері сызық ешқандай арнайы мағынасы жоқ таңба ретінде қарастырылады.
Мысалдар
*foo* "foo" сөзін қамтитын тізбемен сәйкес келеді. mini* "mini" сөзімен басталатын кез келген тізбеге сәйкес келеді (оның ішінде "mini" сөзі де бар). ? ?? үш немесе одан көп әріптен тұратын кез келген тізбеге сәйкес келеді. [0 9a zA Z] кез келген алфавиттік-цифрлық ASCII символына сәйкес келеді. [^] жақша жабылатын тік жақшадан немесе дефистен басқа символға сәйкес келеді.
Қолданылуы
wildmat көбінесе Salz-тің өзінің INN сияқты NNTP іске асырылымдарында, сондай-ақ GNU tar және Transmission сияқты байланыссыз бағдарламалық жасақтамада кездеседі. 1992 жылдың қыркүйегінде GNU tar wildmat-ты POSIX fnmatch glob matcher-мен алмастырды. Алғашқы нұсқада жабылмаған деректерде шектен шығу қаупі бар еді. Бастапқы байтқа бағытталған wildmat іске асыруы көп байтты таңбалар жиынтығын өңдей алмайды және ізделіп жатқан мәтінде бірнеше үйлесімсіз таңбалар жиынтығы болғанда проблемалар тудырады. UTF-8 кодтауына бағытталған wildmat-тың қарапайым нұсқасын IETF NNTP жұмыс тобы әзірледі. Ол NNTP стандартының 2006 жылғы 4-бөлімінің құрамында. Жаңа INN, UTF-8 қолдауымен, wildmat-тың барлық мүмкіндіктерін қолдайтын "uwildmat" қосылды. 2000 жылы жасалған бұл қайта жазу, Рас Аллберидің еңбегі, бастапқы іске асырудағы шектен шығу қатесін жойды. Тығыз C циклдары кішірек түсіндірмелерге бөлінді. Rsync құрамына Уэйн Дэвисон өзгерткен, GPLv3 лицензиясы бар wildmatch деп аталатын wildmat-тың ұрпағы кіреді. 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).