Sto scrivendo un'utilità grep in Lua per i nostri dispositivi mobili che eseguono Windows CE 6/7, ma ho riscontrato alcuni problemi nell'implementazione di modelli di corrispondenza senza distinzione tra maiuscole e minuscole. L'ovvia soluzione di convertire tutto in maiuscolo (o in basso) non funziona così semplicemente a causa delle classi di caratteri.Corrispondenza delle maiuscole senza distinzione tra maiuscole e minuscole
L'unica altra cosa che posso pensare è convertire i letterali nel modello stesso in maiuscolo.
Ecco quello che ho finora:
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
Odio ammetterlo quanto tempo ha preso per ottenere anche così lontano, e posso ancora vedere subito ci stanno per essere problemi con le cose come cento sfuggito segni '%%'
Ho pensato che questo fosse un problema abbastanza comune, ma non riesco a trovare molto sull'argomento. Esistono modi più semplici (o almeno completi) per farlo? Sto iniziando a impazzire qui ... Sperando che i guru della Lua là fuori possano illuminarmi!
Impressionante. Stavo disegnando uno spazio vuoto. A proposito: puoi dire 'modello: gsub' proprio come hai detto' lettera: inferiore'. Potresti anche dire '('[% s% s]'): format' ma è un po 'strano. – Mud
Sì, 'string.format (...)' sembra più familiare di '('[% s% s]'): format (...)', ma mi piace 'pattern: gsub (...) 'meglio! Grazie. –
Incredibile. Ma una domanda ... Come si fa a non convertire qualcosa come '%% test' a' %% [tT] est'? Questa corrispondenza è stata saltata perché la precedente iterazione avrebbe coinciso con entrambi "%%"? Forse il mio cervello è solo un po 'fritto oggi:/ – Nubbychadnezzar