Ich schreibe ein grep-Dienstprogramm in Lua für unsere mobilen Geräte mit Windows CE 6/7, aber ich bin auf einige Probleme mit der Implementierung von Groß-und Kleinschreibung nicht übereinstimmen. Die offensichtliche Lösung, alles in Großbuchstaben (oder niedriger) zu konvertieren, funktioniert aufgrund der Zeichenklassen nicht so einfach.Case-insensitive Lua pattern-matching
Die einzige andere Sache, die ich denken kann, wandelt die Literale in das Muster selbst in Großbuchstaben.
Hier ist, was ich bisher:
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
Ich hasse es zuzugeben, wie lange sogar so weit kommen nahm, und ich kann immer noch sofort sehen, es werden Probleme mit Dingen wie entkam Prozent sein Zeichen '%%'
Ich dachte, das muss ein ziemlich häufiges Problem sein, aber ich kann nicht viel zu dem Thema finden. Gibt es leichtere (oder zumindest vollständige) Möglichkeiten, dies zu tun? Ich fange an, hier verrückt zu werden ... In der Hoffnung, dass Lua-Gurus da draußen mich erleuchten können!
Ehrfürchtig. Ich zeichnete eine Lücke. BTW: Du kannst 'pattern: gsub' genauso sagen wie' 'letter: lower''. Man könnte sogar sagen "('[% s% s]'): format ', aber das ist ein wenig seltsamer. – Mud
Ja, 'string.format (...)' sieht besser aus als '('[% s% s]'): format (...)', aber ich mag das 'pattern: gsub (...) "Besser! Vielen Dank. –
Unglaublich. Aber eine Frage ... Wie konvertiert das nicht etwas wie "%% test" in "%% [tT] est"? Wird diese Übereinstimmung übersprungen, weil die vorherige Iteration mit '%%' übereinstimmt? Vielleicht ist mein Gehirn heute nur ein wenig gebraten:/ – Nubbychadnezzar