2014-12-09 3 views
1

안녕과 같은 단어를 찾는 가장 좋은 방법은 무엇입니까? 패턴을 통해 특수 문자가있는 dön을 주로 사용합니다. 선택 사항이므로 분명히 '?'를 사용해야합니다. 하지만 나는 그들을 찾기 위해 어떤 제어 코드를 사용해야하는지 모른다.루아 패턴과 유니 코드

기본적으로 나는 가능한 유니 코드 문자로 단어를 얻고 싶지만 그 밖의 것은 없다는 것을 확인하고 싶습니다. 따라서 dön은 괜찮을 것이지만 다른 특별한 문자 나 숫자는 없으며 대괄호와 같습니다.

+2

루아 (5.2 이하)의 유니 코드에 대한 지원은 제네릭에서 다소 제한적입니다. 정확히 무엇을 해결하고 싶은지에 대한 [가장 단순하고 완전하며 검증 가능한 예제] (http://stackoverflow.com/help/mcve)를 게시하십시오. 아마도 그것을 해결할 수있는 쉬운 방법이있을 것입니다. –

+0

좋아, 내가 제공 할 수있는 간단한 예제는 특수 문자가 포함 된 단어를 반환 할 수있는 루아 패턴이 필요하다는 것입니다. 하지만 그들은 특수 문자가 없어야합니다. 이것이 가능한 경우 어떻게해야합니까? – TULOA

답변

2

Lua guide on Unicode에 따르면 "루아의 패턴 일치 기능은 바이트 단위로 작동합니다. 일반적으로 유니 코드 패턴 일치는 작동하지 않지만 원하는대로 작동합니다." 즉, 가장 좋은 옵션은 각 문자를 반복하고 올바른 문자 인 경우 해결하는 것입니다. 문자열의 각 유니 코드 문자를 반복 할 myString이 유효 유니 코드가 아닌 경우

for character in string.gmatch(myString, "([%z\1-\127\194-\244][\128-\191]*)") do 
    -- Do something with the character 
end 

참고이 방법은 작동하지 않습니다. 문자는 당신이 원하는 일 경우 단순히 당신이 당신의 문자열에서 원하지 않는 모든 문자의 목록을 가지고 다음을 제외 아마도 최선의 확인하려면이 도움이

local notAllowed = ":()[]{}+_-=\|`~,.<>/[email protected]#$%^&*" 
local isValid = true 

for character in string.gmatch(myString, "([%z\1-\127\194-\244][\128-\191]*)") do 
    if notAllowed:find(character) then 
     isValid = false 
     break 
    end 
end 

희망을.

관련 문제