Lua:在字符串后执行模式匹配吗?
例如,我有符合以下格式的任意行:
directory C:\Program Files\abc\def\
或类似的东西。
log-enabled On
我想能够从第一行中提取出 "C:\Program Files\ab\def\" 部分。同样,我想从第二行中提取出 "On" 的值。变量和其值之间的空格是任意的。我将知道变量的名称,但需要根据它来提取值。
因此,基本上,我想要移除第一个单词和随之而来的任意空格数量,并返回剩余的内容直到行末。
我不相信 Lua 自带类似于 Ruby 或 Perl 中的 split() 函数。
我发现有人在 Lua 中构建了类似于 Perl 中 split() 函数的版本: http://lua-users.org/lists/lua-l/2011-02/msg01145.html
如果你能保证参数在它之前仅有一个单词,而该单词不包含任何空格,则可以读取该行,运行 split 函数,并将返回数组的第一个索引值作为你想要的值。
你也可以进行错误检查,以确保你得到了预期目录中的“C:\”,或者检查字符串是否等于“On”或“Off”。因为使用了硬编码的索引值,我真的建议你检查一下预期的值。没有什么比假定的值错误更糟糕的了。
如果检测到错误,请确保将其记录或打印到屏幕上,以便你了解。
这可以捕捉到可能输入不正确的字符串等 bug。
以下为模拟我建议你采用的一些简单代码:
line = "directory C:\Program Files\abc\def/";
contents = line.split(" "); --使用空格分割
directory = contents[2]; --这就是你的目录
if(errorCheckDir(directory))
--使用目录
end
编辑: 根据下面的评论,Lua 的索引确实从 1 开始,而不是 0。 另外,在目录包含空格的情况下(这是很可能的),不要仅仅使用 contents[2],而是循环遍历除了索引1之外的所有 contents 索引,并将它们拼接起来,确保在每个附加索引之间添加所需的空格。
因此,在上面的情况下,contents[2] 和 contents[3] 必须使用空格拼接起来以恢复正确的目录。
directory = contents[2].." "..contents[3]
这可以很容易地在一个带有循环的函数中自动化,该函数返回正确的目录:
function recoverDir(contents)
directory = "";
--恢复目录
for i=2, table.getn(contents) do
directory = directory..contents[i].." ";
end
--剥离末尾的额外空格
dirEnd = string.len(directory);
directory = string.sub(directory,1,dirEnd-1);
return directory; --正确的目录
end
一个使用 string.match 的替代方法已经被 Nicol Bolas 展示了,下面是另一种替代方法:
function splitOnFirstSpace(input)
local space = input:find(' ') or (#input + 1)
return input:sub(1, space-1), input:sub(space+1)
end
用法:
local command, param = splitOnFirstSpace(line)
如果没有给出参数 (splitOnFirstSpace('no-param-here')), 那么 param 将是空字符串。
- 如何将两个不同的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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
假设您所说的“单词”是“没有空格的字符串”,您可以这样做:
对于 ioFile:lines() 中的每一行 do local variable, value = line:match("(%S+)%s+(.+)") ... --使用变量和值执行任务 结束