Estoy escribiendo una utilidad grep en Lua para nuestros dispositivos móviles con Windows CE 6/7, pero me he encontrado con algunos problemas para implementar patrones de coincidencia insensibles a mayúsculas y minúsculas. La solución obvia de convertir todo a mayúsculas (o menos) no funciona tan simplemente debido a las clases de caracteres.Igualación de patrones Lua insensible a las mayúsculas
La única otra cosa en la que puedo pensar es convertir los literales en el mismo patrón en mayúsculas.
Esto es lo que tengo hasta ahora:
function toUpperPattern(instr)
-- Check first character
if string.find(instr, "^%l") then
instr = string.upper(string.sub(instr, 1, 1)) .. string.sub(instr, 2)
end
-- Check the rest of the pattern
while 1 do
local a, b, str = string.find(instr, "[^%%](%l+)")
if not a then break end
if str then
instr = string.sub(instr, 1, a) .. string.upper(string.sub(instr, a+1, b)) .. string.sub(instr, b + 1)
end
end
return instr
end
Tengo que reconocer cuánto tiempo se tardó en llegar, incluso tan lejos, y todavía se puede ver de inmediato que van a haber problemas con cosas como ciento escapado signos '%%'
Pensé que esto debe ser un problema bastante común, pero parece que no puedo encontrar mucho sobre el tema. ¿Hay formas más fáciles (o al menos completas) de hacer esto? Estoy empezando a volverme loco aquí ... ¡Espero que los gurús de Lua puedan iluminarme!
Impresionante. Estaba dibujando un espacio en blanco. Por cierto: puedes decir 'pattern: gsub' justo como dijiste' letter: lower'. Incluso podría decir '('[% s% s]'): format' pero eso es un poco más extraño. – Mud
Sí, 'string.format (...)' parece más familiar que '('[% s% s]'): formato (...)', pero me gusta el 'patrón: gsub (...) 'mejor! Gracias. –
Increíble. Pero una pregunta ... ¿Cómo eso no convierte algo así como '%% test' en' %% [tT] est'? ¿Se salta esa coincidencia porque la iteración anterior habría coincidido con '%%'? Quizás mi cerebro esté un poco frito hoy:/ – Nubbychadnezzar