Regex 如何捕获更改的配置文件中的值

Regex 如何捕获更改的配置文件中的值,regex,lua,config,openwrt,luci,Regex,Lua,Config,Openwrt,Luci,我在配置文件中捕捉到如下值: file = io.open("testch", "r") -- testch is config file in same directory file:read("*l") file:seek("cur", 17) version = file:read("*l") _, _, version = string.find(version, "(%d+.%d+)'") file:seek("cur", 19) serialnum = file:read("*l

我在配置文件中捕捉到如下值:

file = io.open("testch", "r") -- testch is config file in same directory
file:read("*l")

file:seek("cur", 17)
version = file:read("*l")
_, _, version = string.find(version, "(%d+.%d+)'")

file:seek("cur", 19)
serialnum = file:read("*l")
_, _, serialnum = string.find(serialnum, "(%d+)'")

file:seek("cur", 15)
power = file:read("*l")
_, _, power = string.find(power, "(%d+)'")

io.close(file)

/* below code is config file in the same directory with upper one */
config test
       option version '1.0'
       option serialnum '1234567890'
       option power '30'
但是,当我单击Luci中的Save&Apply按钮来更改配置文件中的值时,更改的数组会转到下面

那是我的问题。当配置文件的数组顺序更改时,我的解决方案无法应用于这种情况。 (我的解决方案可以在固定情况下应用。)


是否有一种解决方案可以应用于每种情况(配置文件的数组在每种情况下都发生了更改)?

我个人的偏好是使用Lua作为配置语言。当已经使用Lua时,实现起来非常简单;它允许您使用图灵完整语言和用户定义的库进行高级配置;完全避免了你遇到的问题

只需将配置文件重新格式化为有效的Lua,并使用
loadfile()
将配置文件作为块加载,如果没有问题,则执行。下面代码中的变量
s
是执行Lua配置文件的环境。给它一个空表意味着您不传递任何内容供配置脚本使用(没有表库、
pairs()
函数等)。您可以传入自己的环境表(
ENV
),但这被认为是非常不安全的,因为配置脚本可能会覆盖您的环境,以新的难以跟踪的方式造成破坏,或者允许攻击者运行恶意代码。最好的做法是根据配置脚本的需要重新创建配置环境。并确保对您的输入进行消毒!不要相信用户不是白痴或邪恶的

配置

version = '1.0'
serialnum = '1234567890'
power = '30'
load.lua

local s = {}
assert(loadfile("config", "t", s))()

print(s.version)
print(s.serialnum)
print(s.power)

您的解决方案可以采用该格式。但是,我知道当我使用您的配置文件格式时,配置文件不能应用于Luci。我说得对吗?