2017-09-12 81 views
2

我再次需要Lua模式的幫助。可以說我有以下字符串:Lua模式文本分割

<c> block - 應匹配cblock

<category>material - 應匹配categorymaterial

decorative - 如果沒有<>塊,那麼它應該回到它被賦予了什麼(或零)。

我對空間不感興趣,所以建在修剪將是很好的。

我設法創建了(<%a>)([^>]+),但它在第一個示例中返回<c>block,很可惜這不是我所追求的。

+1

嘗試'<(%a+)>%S *([^ >] +)' –

回答

5

模式中的(<%a>)部分捕獲尖括號,因此它們落在捕獲的值中。 %a僅匹配一個字母字符,因此您需要在其後添加+量詞以匹配1個或更多字母字符。

使用

<(%a+)>%s*([^>]+) 

%s*將匹配0+空格字符,他們會在外面集團2

一個Lua demo

local function splitString(text) 
    return string.match(text, "<(%a+)>%s*([^>]+)") 
end 

print(splitString("<c> block"))   -- c block 
print(splitString("<category>material")) -- category material 
print(splitString("decorative"))   -- nil 
+0

這裏的人才是真正的天才。謝謝。 – user2463506

+0

只是不要使用全局變量功能:) – moteus

+0

@moteus好吧,一個單一的現在:) –