dzika mata
Deweloperzy | Richa Salza |
---|---|
Typ | Dopasowanie wzorca |
wildmat to biblioteka dopasowująca wzorce opracowana przez Richa Salza . W oparciu o składnię symboli wieloznacznych używaną już w powłoce Bourne'a , wildmat zapewnia jednolity mechanizm dopasowywania wzorców w aplikacjach z prostszą składnią niż typowa dla wyrażeń regularnych . Wzorce są niejawnie zakotwiczone na początku i na końcu każdego łańcucha podczas testowania dopasowania.
W czerwcu 2019 roku Rich Salz udostępnił oryginalną wersję nieistniejącej już biblioteki na GitHub w ramach dedykacji domeny publicznej .
Operacje dopasowywania wzorców
Istnieje pięć operacji dopasowywania wzorców innych niż ścisłe dopasowanie jeden do jednego między wzorcem a źródłem, które ma zostać sprawdzone pod kątem zgodności.
- Gwiazdka ( * ), aby dopasować dowolną sekwencję zera lub więcej znaków.
- Znak zapytania ( ? ), aby dopasować dowolny pojedynczy znak.
- Zestaw określonych znaków. Jest określany jako lista znaków lub jako zakres znaków, w którym początek i koniec zakresu są oddzielone znakiem minus (lub kreską), lub jako dowolna kombinacja list i zakresów. Myślnik może być również zawarty w zestawie jako znak, jeśli jest początkiem lub końcem zestawu. Zestaw ten jest ujęty w nawiasy kwadratowe. Zamknięty nawias kwadratowy (]) może być użyty w zestawie, jeśli jest to pierwszy znak w zestawie.
- Negacja zbioru. Określa się go w taki sam sposób, jak zestaw, z dodaniem znaku daszka (^) na początku ciągu testowego, tuż wewnątrz otwartego nawiasu kwadratowego. (NNTP określa alternatywę! Implementację można skonfigurować tak, aby działała w obu przypadkach).
- odwrotny ( \ ), aby unieważnić specjalne znaczenie otwartego nawiasu kwadratowego ([), gwiazdki, ukośnika odwrotnego lub znaku zapytania. Dwa ukośniki odwrotne w sekwencji spowodują ocenę ukośnika odwrotnego jako znaku bez specjalnego znaczenia.
Przykłady
- *foo* pasuje do ciągu zawierającego „foo”.
- mini* pasuje do wszystkiego, co zaczyna się od „mini” (w tym samego ciągu „mini”).
- ???* pasuje do dowolnego ciągu trzech i więcej liter.
- [0-9a-zA-Z] dopasowuje każdy znak alfanumeryczny ASCII .
- [^]-] dopasowuje znak inny niż zamknięty nawias kwadratowy lub myślnik.
Stosowanie
wildmat jest najczęściej spotykany w implementacjach NNTP , takich jak INN firmy Salz , a także w niepowiązanym oprogramowaniu, takim jak GNU tar i Transmission . GNU tar zastąpił wildmat przez POSIX fnmatch glob matcher we wrześniu 1992 roku. Wczesna wersja zawierała potencjalny dostęp poza zakresem na niezamkniętych [ .
Oryginalna implementacja wildmat zorientowana na bajty nie obsługuje zestawów znaków wielobajtowych i stwarza problemy, gdy wyszukiwany tekst może zawierać wiele niekompatybilnych zestawów znaków. Uproszczona wersja wildmat zorientowana na UTF-8 została opracowana przez grupę roboczą IETF NNTP. Jest częścią RFC 3977 (sekcja 4), standardu NNTP z 2006 roku.
W nowszym INN, który obsługuje UTF-8, dodano „uwildmat”, który obsługuje wszystkie funkcje wildmat. To przepisanie z 2000 roku, przeprowadzone przez Russa Allbery'ego, naprawia OOB w oryginalnej implementacji. Ciasno zwinięte pętle C zostały zapisane w mniejszych instrukcjach.
Rsync zawiera potomka wildmat na licencji GPLv3, znanego jako wildmatch, zmodyfikowanego przez Wayne'a Davisona. System Git importuje go i wykorzystuje. Nie obsługuje UTF-8, ale ma naprawione OOB i ma dodatkową obsługę klas postaci i gwiezdnych kul (** dla dowolnej głębokości).
Zobacz też
Linki zewnętrzne
- Rich Salz (4 kwietnia 1991). "v17i079: wildmat-1.4 - dopasowywanie wzorców w stylu /bin/sh, część 01/01" . Grupa dyskusyjna : comp.sources.misc . Usenet: [email protected] .
- Rich Salz (9 marca 1991). "v17i034: wildmat - dopasowywanie wzorców w stylu /bin/sh, część 01/01" . Grupa dyskusyjna : comp.sources.misc . Usenet: [email protected] .