Lua模式文本拆分

时间:2017-09-12 21:51:25

标签: lua

我再次需要Lua模式的帮助。假设我有以下字符串:

<c> block - 应与cblock

相匹配

<category>material - 应与categorymaterial

相匹配

decorative - 如果没有<>块,那么它应该返回它给出的内容(或零)。

我对空间不感兴趣,所以内置装饰会很好。

我设法创建了(<%a>)([^>]+),但在第一个示例中它返回了<c>block,遗憾的是不是我之后的事情。

1 个答案:

答案 0 :(得分:5)

模式中的(<%a>)部分捕获尖括号,因此它们落在捕获的值中。 %a只匹配一个字母字符,因此您需要在其后添加+量词以匹配1个或多个字母字符。

使用

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

%s*将匹配0 +空白字符,它们将在第2组之外。

A 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