wildmat es una biblioteca de coincidencia de patrones desarrollada por Rich Salz . Basado en la sintaxis de comodines que ya se usa en el shell de Bourne , wildmat proporciona un mecanismo uniforme para hacer coincidir patrones entre aplicaciones con una sintaxis más simple que la que ofrecen las expresiones regulares . Los patrones se anclan implícitamente al principio y al final de cada cadena cuando se prueba una coincidencia.
Desarrollador (es) | Rich Salz |
---|---|
Tipo | La coincidencia de patrones |
En junio de 2019, Rich Salz lanzó la versión original de la biblioteca ahora desaparecida en GitHub bajo una dedicación de dominio público . [1]
Operaciones de coincidencia de patrones
Hay cinco operaciones de coincidencia de patrones distintas de una estricta coincidencia uno a uno entre el patrón y la fuente para comprobar si hay coincidencia.
- Asterisco ( * ) para que coincida con cualquier secuencia de cero o más caracteres.
- Signo de interrogación ( ? ) Para que coincida con cualquier carácter.
- Conjunto de caracteres especificados. Se especifica como una lista de caracteres o como un rango de caracteres donde el principio y el final del rango están separados por un carácter menos (o guión), o como cualquier combinación de listas y rangos. El guión también se puede incluir en el conjunto como un personaje si es el principio o el final del conjunto. Este conjunto se incluye entre corchetes. El corchete cerrado (]) se puede utilizar en un conjunto si es el primer carácter del conjunto.
- Negación de un conjunto. Se especifica de la misma manera que el conjunto con la adición de un carácter de intercalación (^) al comienzo de la cadena de prueba justo dentro del corchete abierto. (¡NNTP especifica una alternativa!. La implementación se puede configurar para hacer cualquiera de las dos).
- Carácter de barra invertida ( \ ) para invalidar el significado especial del corchete abierto ([), el asterisco, la barra invertida o el signo de interrogación. Dos barras invertidas en secuencia darán como resultado la evaluación de la barra invertida como un carácter sin un significado especial.
Ejemplos de
- * foo * coincide con la cadena que contiene "foo".
- mini * coincide con cualquier cosa que comience con "mini" (incluida la cadena "mini").
- ??? * coincide con cualquier cadena de tres o más letras.
- [0-9a-zA-Z] coincide con todos los caracteres alfanuméricos ASCII .
- [^] -] coincide con un carácter que no sea un corchete o un guión.
Uso
wildmat se ve más comúnmente en implementaciones de NNTP como INN de Salz , también en software no relacionado como GNU tar y Transmission . GNU tar reemplazó wildmat con POSIX fnmatch glob matcher en septiembre de 1992. La primera versión contenía un potencial acceso fuera de límites en [ . [2]
La implementación original de comodines orientados a bytes no puede manejar juegos de caracteres multibyte y plantea problemas cuando el texto que se busca puede contener múltiples juegos de caracteres incompatibles. El grupo de trabajo IETF NNTP ha desarrollado una versión simplificada de wildmat orientada hacia la codificación UTF-8 . Es parte de RFC 3977 (sección 4), el estándar de 2006 para NNTP.
En la nueva INN que admite UTF-8, se agregó un "uwildmat" que admite todas las características de wildmat. Esta reescritura de 2000, realizada por Russ Allbery, corrige el OOB en la implementación original. Los bucles C apretados se escribieron en declaraciones más pequeñas. [3] [4]
Rsync incluye un descendiente de wildmat con licencia GPLv3 conocido como wildmatch, modificado por Wayne Davison. El sistema de control de versiones de Git lo importa y lo utiliza. No es compatible con UTF-8, pero tiene el OOB fijo y tiene soporte adicional para clases de personajes y globos de estrellas (** para profundidad arbitraria). [5]
Ver también
Referencias
- ^ Salz, Rich (25 de junio de 2019). "wildmat: el clásico juego de patrones de wildmat; dominio público" . Consultado el 25 de noviembre de 2019 .
- ^ Salz, Rich (25 de junio de 2019). "wildmat.c" .
Puede que no sea robusto frente a patrones mal formados; por ejemplo, "foo [a-" podría causar una infracción de segmentación.
- ^ Manual de funciones de la biblioteca de Linux -
- ^ "uwildmat.c en el tronco / lib - INN" . inn.eyrie.org . Consultado el 27 de noviembre de 2019 .
- ^ "git / git: wildmatch.c" . GitHub .
enlaces externos
- Rich Salz (4 de abril de 1991). "v17i079: wildmat-1.4 - comparador de patrones a / bin / sh-style, Part01 / 01" . Grupo de noticias : comp.sources.misc . Usenet: [email protected] .
- Rich Salz (9 de marzo de 1991). "v17i034: wildmat - comparador de patrones de estilo / bin / sh, Part01 / 01" . Grupo de noticias : comp.sources.misc . Usenet: [email protected] .