【发布时间】:2020-03-01 20:28:26
【问题描述】:
我想在下表中进行模式匹配。如果匹配,则取第二列和第三列的值作为答案。第一列可以有 1 个或多个模式,第 5 行只有一个模式可以匹配。
local pattern_matrix = {
{{ "^small%-", "%-small%-", }, "small", 50},
{{ "^medium%-", "%-medium%-", }, "medium", 200},
{{ "^big%-", "%-big%-", }, "big", 3},
{{ "^large%-", "%-large%-", "^L%-", }, "large", 42},
{{ "%-special%-", }, "special", 5},
}
我正在使用以下代码来查找与输入匹配的行:
local function determine_row(name)
for i = 1,#pattern_matrix,1 do
for _,pattern in pairs(pattern_matrix[i][1]) do --match against column 1
if name:match(pattern) then
return i --match found in row i
end
end
end
return 0
end
结果应该是
determine_row("itsamedium") = 2
determine_row("blaspecialdiscount") = 5
determine_row("nodatatomatch") = 0
【问题讨论】:
-
如果你只想返回第三列作为函数的结果,那么第二列有什么意义呢?另外,我认为您不需要 %-small%- 或 %-medium%- 中的
%-等。如果您只是在较大的单词中匹配单词 'small',则模式small将工作。
标签: arrays lua pattern-matching