如何使用模式仅缩短匹配字符串。

我有一个程序,可以获取外设类型列表,匹配它们以确定它们是否为有效类型,如果它们有效则执行特定于类型的代码。

但是,其中一些类型可能分享其名称的某些部分,唯一区别是它们的层级,我想将它们与有效外设表中列出的基本类型匹配,但我无法想出如何使用模式匹配它们,而不返回 nil 给所有不匹配的情况。

以下是演示我的问题的代码:

如果我直接运行它,所有的热膨胀电池都无法识别为有效外设,如果我添加一个模式匹配语句,它会为热膨胀电池工作,但会返回其他所有东西的 nil 值,并引发异常。

如何使用匹配语句只返回匹配的缩短字符串,对于不匹配的情况返回原始字符串?

这可行吗?

点赞
用户1190388
用户1190388

根据 此评论,您也可以使用 string.find 来查看和外围设备名称匹配的类型:

for i,v in ipairs(connectedPeripherals) do
    local Valid = CheckValidity(v)
    if Valid then Valid() end
end

在此,CheckValidity 将返回 validPeripherals 中的键:

function CheckValidity( name )
    for n, b in pairs(validPeripherals) do
        if name:find( n ) then return n end
    end
    return false
end
2015-04-03 08:44:26
用户2726734
用户2726734

如果短版本不包含任何 Lua 模式中的特殊字符,可以使用以下方式:

long = "tile_thermalexpansion_cell_basic_name"

result = long:match("tile_thermalexpansion_cell") or long
print(result) -- 打印出较短的版本

result = long:match("foo") or long
print(result) -- 打印出长版本
2015-04-03 12:56:59