Estoy tratando de crear un script para realizar búsquedas difusas dentro de un búfer. La idea principal es tomar algo de entrada e insertar .\{-}
entre cada par de caracteres, por ejemplo, se foo
convierte f.\{-}o.\{-}o
.
Esto funciona bastante bien, pero genera muchas coincidencias no ideales. Creo que una búsqueda difusa debería producir primero las coincidencias más cortas. Considere el siguiente ejemplo:
public void put()
Hacer una búsqueda difusa para put
(entonces p.\{-}u.\{-}t
) coincidirá con la cadena completa public void put
, pero el más corto put
dentro de esa coincidencia sería más útil.
El operador no codicioso es bueno para encontrar coincidencias que terminen antes, pero necesito algo que pueda, al mismo tiempo, preferir coincidencias que comiencen más tarde. Conceptualmente, no debe ser codicioso en ambas direcciones. es posible?
fuente
Respuestas:
No hay suficientes ejemplos, pero creo que esto hace lo que quieres.
coincidiría
put
en su ejemplo en lugar depublic void put
. Básicamente,.*
obliga al motor regex a comenzar a buscar la cadena hacia atrás, ya que.*
primero consume toda la cadena y luego retrocede, para encontrar la última coincidencia dep.\{-}u.\{-}t
fuente
pouty puppet
para producir dos partidos.