2013-03-20 72 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