如何捕捉&;Lua中长命令行参数的模式匹配?
我想像这样解析长命令行参数 --键=值 --键\名称=值\值 --关键字名称=值 其中,键名称和值可以包含下划线或破折号,也可以同时包含下划线和破折号 任何不匹配的内容都应跳过 这就是我目前所拥有的如何捕捉&;Lua中长命令行参数的模式匹配?,lua,Lua,我想像这样解析长命令行参数 --键=值 --键\名称=值\值 --关键字名称=值 其中,键名称和值可以包含下划线或破折号,也可以同时包含下划线和破折号 任何不匹配的内容都应跳过 这就是我目前所拥有的 local args = {...} for i = 1, #args, 1 do print("arg[i]=", args[i]) local string = args[i] local k,v = string:match("%-%-([^=-]+)=([^=]+)"
local args = {...}
for i = 1, #args, 1 do
print("arg[i]=", args[i])
local string = args[i]
local k,v = string:match("%-%-([^=-]+)=([^=]+)")
print("k=", k)
print("v=", v)
end
它在一定程度上起作用,但也与--key_name=value匹配
i、 e.3破折号
我做错了什么?你没有强迫匹配在你的论点开始时发生,所以它很高兴跳过前导的
-
并匹配论点的其余部分
对脚本进行小的修改,以独立运行并捕获比赛开始的位置:
for i = 1, #arg, 1 do
print("arg[i]=", arg[i])
local string = arg[i]
local p,k,v = string:match("()%-%-([^=-]+)=([^=]+)")
print("p=", p)
print("k=", k)
print("v=", v)
end
运行/script.lua---fook=foov--bark=barv
输出:
arg[i]= ---fook=foov
p= 2
k= fook
v= foov
arg[i]= --bark=barv
p= 1
k= bark
v= barv
与之相比:
for i = 1, #arg, 1 do
print("arg[i]=", arg[i])
local string = arg[i]
local p,k,v = string:match("^()%-%-([^=-]+)=([^=]+)")
print("p=", p)
print("k=", k)
print("v=", v)
end
输出(对于相同的/script.lua---fook=foov--bark=barv
):
另外,对于记录string
是一个糟糕的变量名称,因为您刚刚删除了默认的string
函数表
arg[i]= ---fook=foov
p= nil
k= nil
v= nil
arg[i]= --bark=barv
p= 1
k= bark
v= barv