2013-03-20 70 views
1

我想知道是否有可能做出可能像这样工作模式:匹配没有以上的Lua模式

随着[icon=star w=32 h=32 spin=90],它会返回一个表:

icon: star 
w: 32 
h: 32 
spin: 90 

我已经尝试做[icon=(.-) ((.-)=(.-))],但它打破。

+0

输入有 “旋= 90”,但你说你想要得到“自旋:32“作为输出。这是故意翻译还是错字? – 2013-03-20 21:33:32

+0

你不能使用正则表达式格式化结果不同......但你可以使用正则表达式来拉出组中的相关信息,然后打印那些结果,但是你需要它们 – Daedalus 2013-03-20 21:35:58

+0

是的,我写这个时候已经很晚了,所以我可能会做了一些拼写错误。抱歉! – user2150130 2013-03-21 08:25:19

回答

1

使用以下表达式:(\w+(?=\=))=((?<=\=)\w+)每场比赛的组1将是左侧,每场比赛的组2将是右侧。

实施例:http://regexr.com?3478b

+2

这是在lua中无效的正则表达式语法 – 2013-03-20 21:50:10

+0

@ m.buettner - POSIX再次阻止我。对不起,我没有对那个人进行尽职调查。 – Daedalus 2013-03-20 21:56:10

0

尝试这种情况:

​​3210

每个匹配将有两组:

  • 组1将是 “名称”
  • 组2将是“价值”
+3

这是在lua中无效的正则表达式语法 – 2013-03-20 21:50:51

3

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是:

+0

完美地工作。谢谢! – user2150130 2013-03-21 08:31:21

+0

您可以将答复标记为已接受,以便该问题不会列为未答复。 @ user2150130 – hjpotter92 2013-03-21 08:33:57

0
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