string.match太广泛了,有其他更好的替代品吗?

目前我正在从家庭自动化控制器传递一堆字符串给我们的驱动程序,我正在开发中。

我收到像ZAA和其他可能是AA但是string.match有时会将AAZAAif语句匹配。

这个问题比那两个字符串(大约有10-15个其他相似之处)更广泛。

我知道我可以添加更多的条件到if / elseif语句中,但肯定有一个精确的匹配版本,对吧?

任何想法都会受到极大的赞赏。

示例; 即使字符串是"AA",它也会匹配"ZAA"

stringInput = "AA"

if string.match("ZAA", stringInput) then
    print("我匹配了:ZAA")
elseif string.match("AA", stringInput) then
    print("我匹配了:AA")
end
点赞
用户13691762
用户13691762

如果您想要 完全匹配,只需使用 ==

如果 stringInput == 'ZAA' then
    print('我匹配了:ZAA')
elseif stringInput == 'AA' then
    print('我匹配了:AA')
end
2020-07-14 12:40:41
用户2858170
用户2858170

Lua 5.3. 参考手册: string.match中翻译得知:

string.match (s, pattern [, init])

在字符串s中查找模式(参见§6.4.1)的第一个匹配项。如果找到,则match返回模式的捕获;否则它就返回nil。如果模式没有指定捕获内容,则返回整个匹配项。第三个、可选的数字参数init指定了搜索开始的位置;它的默认值为1,也可以为负数。

因此,

local inputString = "AA"
string.match("ZAA", inputString)

会匹配成功,因为"AA"出现在"ZAA"中。

你搞混了函数参数spattern

local inputString = "AA"
inputString:match("ZAA")

不会匹配成功,因为模式包含的字符比输入的字符串inputString多。

但是,由于

local inputString = "ZAA"

这两种写法

inputString:match("AA")inputString:match("ZAA")都会匹配成功,因此你可能需要添加更多限制条件。

请仔细阅读手册!

2020-07-15 07:17:46