Piszę narzędzie grep w Lua dla naszych urządzeń mobilnych z systemem Windows CE 6/7, ale mam pewne problemy z wprowadzaniem wzorców dopasowania niewrażliwych na wielkość znaków. Oczywiste rozwiązanie konwersji wszystkiego na wielkie (lub niższe) nie działa tak po prostu ze względu na klasy znaków.Rozróżnianie wielkości liter Lua
Jedyne, co mogę wymyślić, to przekształcenie literałów w sam wzór na wielkie litery.
Oto co mam do tej pory:
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
Nienawidzę przyznać, jak długo zajęło się jeszcze tak daleko, a ja wciąż widzę od razu tam będą problemy z rzeczy, jak uciekł procent znaki "%%"
Pomyślałem, że to dość powszechny problem, ale nie mogę znaleźć wiele na ten temat. Czy są jakieś łatwiejsze (lub przynajmniej kompletne) sposoby, aby to zrobić? Zaczynam szaleć tutaj ... Mam nadzieję, że wy, guru Lua, możecie mnie oświecić!
Awesome. Rysowałem puste miejsce. BTW: możesz powiedzieć 'wzór: gsub' tak jak powiedziałeś' letter: lower'. Możesz nawet powiedzieć '('[% s% s]'): format' ale to trochę dziwniejsze. – Mud
Tak, 'string.format (...)' wygląda lepiej niż '('[% s% s]'): format (...)', ale podoba mi się 'wzorzec: gsub (...) 'lepiej! Dzięki. –
Niewiarygodne. Ale jedno pytanie ... Jak to nie przekształcić czegoś takiego jak '%% test' na' %% [tT] est'? Czy to dopasowanie zostało pominięte, ponieważ poprzednia iteracja pasowałaby do "%%"? Może mój mózg jest dziś trochę smażony:/ – Nubbychadnezzar