LUA 嵌套表中的模式匹配
2020-3-1 20:28:27
收藏:0
阅读:149
评论: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
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

你的代码看起来大部分都是正确的,但是你使用的模式有一点偏差。你没有得到预期的索引,因为所有的模式都期望在匹配单词时包含连字符(由于你的模式中的
%-)。正如 Allister 所提到的,如果你想匹配你问题中的示例输入,你可以在你的模式列表中添加该字面文字。根据你的用法,你甚至可以简化模式。为了进行不区分大小写的搜索,在匹配之前使用
lower()或upper()处理输入。例如:
<script src="https://github.com/fengari-lua/fengari-web/releases/download/v0.1.4/fengari-web.js"> </script> <script type='application/lua'> local pattern_matrix = { { "small", 50}, { "medium", 200}, { "big", 3}, { "large", 42}, { "special", 5}, } local function determine_row(name) for i, row in ipairs(pattern_matrix) do if name:match(row[1]) then return i -- 匹配第 i 行 end end return 0 end local test_input = { "itsa-medium-", "itsBiG no hyphen", "bla-special-discount", "nodatatomatch" } for _, each in ipairs(test_input) do print( each, determine_row(each:lower()) ) end </script>