Lua:字符串匹配和正则表达式

Posted

技术标签:

【中文标题】Lua:字符串匹配和正则表达式【英文标题】:Lua: String.match and Regex 【发布时间】: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
--]]

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

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

谢谢

【问题讨论】:

【参考方案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* 跳过任何空格,甚至是空的。

【讨论】:

以上是关于Lua:字符串匹配和正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Lua:字符串匹配和正则表达式

lua 正则表达式,用于将关键字与 PHP 采用的值进行匹配

lua正则匹配中\t是啥意思?

Lua中字符串与模式匹配(正则表达式)

Lua中的正则表达式

lua 怎么读取txt文件最后一行内容?