我想知道是否有可能做出可能像这样工作模式:匹配没有以上的Lua模式
随着[icon=star w=32 h=32 spin=90]
,它会返回一个表:
icon: star
w: 32
h: 32
spin: 90
我已经尝试做[icon=(.-) ((.-)=(.-))]
,但它打破。
我想知道是否有可能做出可能像这样工作模式:匹配没有以上的Lua模式
随着[icon=star w=32 h=32 spin=90]
,它会返回一个表:
icon: star
w: 32
h: 32
spin: 90
我已经尝试做[icon=(.-) ((.-)=(.-))]
,但它打破。
使用以下表达式:(\w+(?=\=))=((?<=\=)\w+)
每场比赛的组1将是左侧,每场比赛的组2将是右侧。
这是在lua中无效的正则表达式语法 – 2013-03-20 21:50:10
@ m.buettner - POSIX再次阻止我。对不起,我没有对那个人进行尽职调查。 – Daedalus 2013-03-20 21:56:10
尝试这种情况:
3210每个匹配将有两组:
这是在lua中无效的正则表达式语法 – 2013-03-20 21:50:51
Lua在字面意义上没有正则表达式。它使用模式。
因此,对于你的情况,我宁愿使用GSUB(或gmatch):
local str = "[icon=star w=32 h=32 spin=90]"
local tR = {}
str:gsub("(%w+)%=(%w+)", function(x, y) tR[x] = y end)
而且你tR
将有你想要的精确结果。
更多教程上gmatch和GSUB是:
完美地工作。谢谢! – user2150130 2013-03-21 08:31:21
您可以将答复标记为已接受,以便该问题不会列为未答复。 @ user2150130 – hjpotter92 2013-03-21 08:33:57
for k, v in ("[icon=star w=32 h=32 spin=90]"):gmatch("(%w+)=(%w+)")
do print(k..":",v) end
icon: star
w: 32
h: 32
spin: 90
输入有 “旋= 90”,但你说你想要得到“自旋:32“作为输出。这是故意翻译还是错字? – 2013-03-20 21:33:32
你不能使用正则表达式格式化结果不同......但你可以使用正则表达式来拉出组中的相关信息,然后打印那些结果,但是你需要它们 – Daedalus 2013-03-20 21:35:58
是的,我写这个时候已经很晚了,所以我可能会做了一些拼写错误。抱歉! – user2150130 2013-03-21 08:25:19