Кіріспе

Рич Салц әзірлеген үлгілерді сәйкестендіру кітапханасы – wildmat. wildmat Рич Салц әзірлеген, Боурн қабығында қолданылатын жол таңбалары синтаксисіне негіделген үлгілерді сәйкестендіру кітапханасы. Бұл кітапхана, әдеттегі жүйелі өрнектерге қарағанда қарапайым синтаксиспен, қолданбалар арасындағы үлгілерді сәйкестендірудің бірыңғай механизмін ұсынады. Үлгілерді сәйкестікке тексеру кезінде әрбір жолдың басы мен соңы автоматты түрде бекітіледі. 2019 жылдың маусым айында Рич Салц бұл кітапхананың бастапқы нұсқасын GitHub-та, қоғамдық доменге беріп, жариялады. Қазіргі таңда бұл кітапхана қолданылмайды.

Үлгілерді сәйкестендіру операциялары

Үлгі мен тексерілетін дерек көзі арасындағы қатаң бір-бірге сәйкестіктен басқа бес үлгі сәйкестіру операциясы бар. Жұлдызша (*) – нөл немесе одан көп таңбадан тұратын кез келген тізбекті сәйкестіреді. Сұрақ белгісі (?) – кез келген бір таңбаға сәйкес келеді. Белгілі таңбалар жиынтығы. Ол таңбалар тізімі түрінде немесе диапазон түрінде беріледі, онда диапазонның басы мен соңы минус (немесе тире) таңбасымен бөлінеді, немесе тізімдер мен диапазонның кез келген комбинациясы түрінде ұсынылуы мүмкін. Тире жиынның басында немесе соңында болса, оны жиынға таңба ретінде қосуға болады. Бұл жиын квадрат жақшалармен қоршалған. Егер жабық квадрат жақша (]) жиынның бірінші таңбасы болса, оны қолдануға болады. Жиынның жоғарылатылуы (терістелуі). Ол жиын сияқты беріледі, бірақ ашық квадрат жақшаның ішіндегі сынақ тізбегінің басында 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-ді қолдамайды, бірақ шектен шығу қатесі түзетілген және таңба кластары мен жұлдызшалар үшін (** кез келген тереңдік үшін) қосымша қолдау бар.