我有一个字母字符串,YYY
或NNN
等,并且我想测试第一个字符是Y
,还是中间字符是{ {1}}。
这需要在不同的行上多次进行,以检查不同的值。
我确实有一个可行的解决方案(感谢this):
Y
我只是想知道是否有一种更简单的方法,因为我只需要检查字符串中的第一个字母(在这种情况下)是否为matchCode1 = 'YYY'
function set(...)
local ret = {}
for _,k in ipairs({...}) do ret[k] = true end
return ret
end
if set('YYY', 'YYN', 'YNY', 'YNN')[matchCode1] then
print('true')
else
print('false')
end
。
Y
可以是matchCode1
和Y
的任意组合,但始终为3个字符。
我要检查的其他情况是第二个字符是N
,第三个字符是Y
,然后如果所有字符都是Y
。
任何建议都将受到欢迎!
答案 0 :(得分:1)
您可以使用string.find
。 string.find
将采用Lua模式并在给定的字符串中搜索匹配项,它将返回char的索引。
此示例仅查看Y
的第一个实例:
function checkMatchCode(code)
startIndex = code:find('Y')
if startIndex == 1 or startIndex == 2 then
print(code .. ': true')
else
print(code .. ': false')
end
end
checkMatchCode('YYY')
checkMatchCode('YNY')
checkMatchCode('NYY')
checkMatchCode('NYN')
checkMatchCode('NNY')
checkMatchCode('NNN')
输出:
YYY: true
YYN: true
YNY: true
NYY: true
NYN: true
NNY: false
NNN: false
您也可以类似地使用string.gmatch
来创建匹配结果表
此示例检查字符串中的每个字符是否为Y
:
function checkMatchCode(code)
local results = {}
for char in code:gmatch('.') do
local charPosition = #results + 1
if char == 'Y' then
results[charPosition] = true
else
results[charPosition] = false
end
end
if results[1] and results[2] then -- using an and here to show the difference
print(code .. ': true')
else
print(code .. ': false')
end
end
checkMatchCode('YYY')
checkMatchCode('YNY')
checkMatchCode('NYY')
checkMatchCode('NYN')
checkMatchCode('NNY')
checkMatchCode('NNN')
输出:
YYY: true
YYN: true
YNY: false
NYY: false
NYN: false
NNY: false
NNN: false
如果您关心匹配多个字符或使用所有匹配结果的表来替换代码中的其他位置,那么 string.gmatch
是一个更强大的选项。
string.find
是一种快速检查,它可以告诉您是否至少有1个Y
,并且该Y
在哪里,它不在乎是1个还是3个{{1 }}是,您只会在第一场比赛中获得相关信息。