【问题标题】:Lua: String.match and RegexLua:字符串匹配和正则表达式
【发布时间】:2021-09-11 23:09:02
【问题描述】:

我有一个 json 输出,但不幸的是,我无法使用任何 json 库解析它,因为我运行脚本的设备无法更新。

根据设备型号,我得到的输出略有不同(注意冒号前的空格):

json_output1='{ "var1" : "result1", "var2" : "result2", "var3" : "result3", "var4" : "10" }'
or
json_output2='{ "var1": "result1", "var2": "result2", "var3": "result3", "var4": "10" }'

我找到了一种方法可以用 string:match() 和正则表达式将其解析为字符串

var1, var2, var3, var4 = json_ouptut1:match('.+"var1" : "([^"]+)"'
               .. '.+"var2" : "([^"]+)"'
               .. '.+"var3" : "([^"]+)"'
               .. '.+"var4" : "([^"]+)"')
print(var2) 
--[[ OUTOUT
$lua main.lua
result2
--]]

这项工作我很满意,但由于冒号前的空格,它只适用于一个或另一个输出。

知道如何让这对任何一个字符串都有效吗?

谢谢

【问题讨论】:

    标签: string lua lua-patterns


    【解决方案1】:

    您可以使用%s? 允许模式查找 1 或 0 个空格。

    json_output1='{ "var1" : "result1", "var2" : "result2", "var3" : "result3", "var4" : "10" }'
    json_output2='{ "var1": "result1", "var2": "result2", "var3": "result3", "var4": "10" }'
    
    var1, var2, var3, var4 = json_output1:match('.+"var1"%s?: "([^"]+)"'
                   .. '.+"var2"%s?: "([^"]+)"'
                   .. '.+"var3"%s?: "([^"]+)"'
                   .. '.+"var4"%s?: "([^"]+)"')
    print(var2)
    
    var1, var2, var3, var4 = json_output2:match('.+"var1"%s?: "([^"]+)"'
                   .. '.+"var2"%s?: "([^"]+)"'
                   .. '.+"var3"%s?: "([^"]+)"'
                   .. '.+"var4"%s?: "([^"]+)"')
    print(var2)
    

    这里是有关 Lua 模式信息的好资源:Understanding Lua Patterns

    【讨论】:

      【解决方案2】:

      试试这个代码。它适用于两种输入。根据需要进行调整。

      for k,v in json_output:gmatch('"(.-)"%s*:%s*"(.-)"') do
          print(k,v)
      end
      

      这里的关键是使用%s* 跳过任何空格,甚至是空的。

      【讨论】:

        猜你喜欢
        • 2017-03-20
        • 2012-06-05
        • 2013-12-25
        • 1970-01-01
        相关资源
        最近更新 更多