【问题标题】:LUA select specific string in tableLUA 选择表中的特定字符串
【发布时间】:2018-12-05 03:47:58
【问题描述】:

我无法从 LUA 表中恢复值。

表格(字符串):

table = {
key = "/get value0\n/get [opt1][opt2] value1\n/get [opt1][opt2][opt3][opt4] value2\n/get value3\n/get [opt1] value4",
},

是否可以为第一行选择“/get”和“value0”。 以及所有其他行上的“/get”和“value1 or 2 / 3 / 4”?

我想我有一个想法让它发挥作用,但说起来容易做起来难

  • 1) 计算“\n”的总数并加一。
  • 2) 选择第一个“/”和第一个空格。
  • 3) 选择最后一个“]”(如果存在)或值之前的最后一个空格。
  • 4) 对每一行重复该操作。

结果:

/get value0 
/get value1 
/get value2 
/get value3 
/get value4

【问题讨论】:

  • 你说第一个代码块是一个表格,但它没有表格语法(即花括号{})。是单串吗?这会影响解决方案应该是什么。
  • 我为表格编辑帖子。

标签: string select lua lua-table


【解决方案1】:

试试这个代码:

s=[[
/get value0
/get [opt1][opt2] value1
/get [opt1][opt2][opt3][opt4] value2
/get value3
/get [opt1] value4
]]

for l in s:gmatch("(/.-)\n") do
    print((l:gsub("%b[]%s*","")))
end

它首先将字符串分成几行,然后删除括号中的所有字符串,可选地后跟空格。

更简单的匹配是l:gsub(" .* "," "),它将删除从第一个空格到最后一个空格的所有内容。

如果要拆分结果字符串,请使用以下代码:

for l in s:gmatch("(/.-)\n") do
    local var1, var2 = l:gsub(" .* "," "):match("(.*) (.*)$")
    print(var1, var2 )
end

【讨论】:

  • 这项工作:) 但结果可能有 2 个变量。 var1 = /get 和 var2=value1 ?
  • 在没有空格的情况下工作,如何为 var2 添加对空格 (%s) 的支持 /get [opt1] this : is value var 1 => /get var 2 => this : is value never understand本系统lua.org/pil/20.2.html
猜你喜欢
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
相关资源
最近更新 更多