Windows CE 6/7을 실행하는 모바일 장치 용 Lua의 grep 유틸리티를 작성하고 있지만 대/소문자를 구분하지 않는 일치 패턴 구현과 관련된 몇 가지 문제가 있습니다. 모든 것을 대문자 (또는 더 낮은)로 변환하는 분명한 해결책은 문자 클래스로 인해 그렇게 간단하게 작동하지 않습니다.대소 문자 구별 없음 Lua 패턴 일치
내가 생각할 수있는 유일한 다른 점은 패턴 자체의 리터럴을 대문자로 변환하는 것입니다. 여기
는 지금까지이 작업은 다음과 같습니다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
나는 심지어 멀리 얻을하는 데 걸린 시간을 인정하기 싫어, 난 여전히 탈출 %로 같은 것들에 문제가있을거야 바로 볼 수 있습니다 signs '%%'
나는 이것이 매우 일반적인 문제라고 생각했지만, 주제에 대해 많은 것을 찾지 못했습니다. 더 쉬운 방법 (또는 적어도 완전한 방법)이 있습니까? 나는 여기에 미쳐 가기 시작하고있다. ... 루아 루스가 나에게 가르쳐 줄 것을 기대하고있다! 이 같은
굉장합니다. 나는 공백을 그리고 있었다. BTW :'letter : lower'라고 말한 것처럼'pattern : gsub'라고 말할 수 있습니다. '('[% s % s]') : format'이라고 말할 수도 있습니다.하지만 좀 이상합니다. – Mud
예 :'string.format (...)'은'('[% s % s]') : format (...)'보다 친숙 해 보이지만'pattern : gsub (...) '더 나아! 감사. –
인크 레 더블. 하지만 한 가지 질문은 ... 어떻게'%% test'를'%% [tT] est'로 변환하지 않습니까? 이전 반복이 '%%'와 (과) 일치하기 때문에 일치가 건너 뛰었습니까? 어쩌면 내 두뇌는 오늘 조금 튀긴 것 같습니다 :/ – Nubbychadnezzar