2017-09-12 116 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好吧,一个单一的现在:) –