【问题标题】:Lua Patterns and UnicodeLua 模式和 Unicode
【发布时间】:2015-02-07 00:40:56
【问题描述】:

通过模式找到诸如 Hi 之类的单词或主要像 dön 这样的名称的最佳方法是什么?它们是可选的,因此显然应该使用“?”但我不知道用什么控制代码来找到它们。

我基本上想确保我得到的单词中可能包含 unicode 字符,但没有别的。所以 dön 会很好,但没有其他特殊字符或数字之类的括号。

【问题讨论】:

  • Lua(5.2 或更早版本)对 Unicode 的支持在一般情况下是相当有限的。发a Minimal, Complete, and Verifiable example你到底想解决什么,也许有一个简单的方法来解决它,也许没有。
  • 好的,我可以给出的最简单的例子是我需要一个可以返回带有特殊字符的单词的 lua 模式。但他们不必有特殊字符。如果这是可能的,我该怎么做?

标签: unicode lua lua-patterns world-of-warcraft


【解决方案1】:

根据Lua guide on Unicode,“Lua 的模式匹配工具逐字节工作。一般来说,这不适用于 Unicode 模式匹配,尽管有些事情可以按你的意愿工作”。这意味着最好的选择可能是遍历每个字符并确定它是否是有效字母。遍历字符串中的每个 unicode 字符:

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

请注意,如果 myString 不是有效的 unicode,则此方法将不起作用。要检查字符是否是您想要的字符,最好在字符串中列出您不想要的所有字符,然后排除它们:

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2021-05-21
    • 2015-06-01
    • 1970-01-01
    • 2012-11-08
    • 2013-01-19
    • 2014-10-12
    • 1970-01-01
    • 2018-03-11
    • 2014-11-15
    相关资源
    最近更新 更多