匹配零个或多个 Lua 模式。

我想知道是否有可能创建一个能像这样工作的模式:

使用 [icon=star w=32 h=32 spin=90],它将返回以下表格:

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

我尝试过 [icon=(.-) ((.-)=(.-))] 但它出问题了。

点赞
用户2136768
用户2136768

使用以下表达式:(\w+(?=\=))=((?<=\=)\w+),每个匹配的第一组将是左侧,而每个匹配的第二组将是右侧。

示例:http://regexr.com?3478b

2013-03-20 21:32:25
用户256196
用户256196

尝试这个:

(\ w +)=(\ w +)

每个匹配将有两个组:

  • 组1将是“名称”
  • 组2将是“值”
2013-03-20 21:40:13
用户1190388
用户1190388

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的教程:

2013-03-20 21:40:59
用户1442917
用户1442917
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

使用 Lua 编写了一个循环,将字符串 "[icon=star w=32 h=32 spin=90]" 中的键和值分离出来,并打印出来,结果如下:

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

2013-03-21 03:35:20