匹配无或多个Lua模式

时间:2013-03-20 21:27:19

标签: regex lua pattern-matching string-matching

我想知道是否有可能制作一个可以这样工作的模式:

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

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

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

4 个答案:

答案 0 :(得分: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的更多教程是:

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

试试这个:

(\w+)=(\w+)

每场比赛将有两组:

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

答案 3 :(得分: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