Lua模式和Unicode

什么是查找单词(例如“ Hi”)或带有特殊字符的名称(例如“ dön”)的最佳方式?它们可能是可选项,因此显然应使用“?”但是我不知道要使用哪个控制代码来查找它们。

基本上,我想确保我获取带有可能包含Unicode字符的单词,但没有其他特殊字符、数字或括号等。所以“ dön”是可以的,但没有其他特殊字符。

点赞
用户1511372
用户1511372

根据Lua Unicode指南,"Lua的模式匹配功能逐字节工作。一般来说,这对Unicode模式匹配不起作用,但某些东西会按照您的预期工作". 这意味着最好的选择可能是迭代每个字符并判断它是否是有效的字母。要循环遍历字符串中的每个Unicode字符:

for character in string.gmatch(myString, "([%z\1-\127\194-\244][\128-\191]*)") do
    -- 与字符交互
end

请注意,如果myString无效,则此方法将无法正常工作。要检查字符是否是您想要的字符,最好的方法可能是简单地拥有您字符串中不想要的所有字符的列表,然后将它们排除:

local notAllowed = ":()[]{}+_-=\|`~,.<>/?!@#$%^&*"
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

希望这可以帮助您。

2014-12-10 15:12:46