Lua模式匹配:分隔捕获

我正在尝试解析这样的字符串:&1 first &2 second &4 fourth \\,并从中构建一个表格

t = {1=first, 2=second, 4=fourth}

我对正则表达式不是很有经验,所以我的尝试(暂时忽略\\和表格部分)是

local s = [[&1 first &2 second &4 fourth \\]]

for k,v in string.gmatch(s, "&(%d+)(.-)&") do
    print("k = "..k..", v = "..v)
end

这只给出了第一个捕获的对,而我期望看到两个捕获的对。我已经阅读了一些资料,并发现了lpeg库,但它对我来说完全陌生。这里需要使用lpeg吗?有谁能解释我的错误吗?

点赞
用户102441
用户102441
  1. &(%d+)(.-)& 匹配 &1 first &
  2. 2 second &4 fourth \\ 留待匹配
  3. 您的模式没有进一步匹配任何项。
2013-06-13 21:08:51
用户1442917
用户1442917

如果你知道值只由一个单词组成,下面这段代码应该可以工作:

string.gmatch(s, "&(%d+)%s+([^%s&]+)")

匹配 "&",紧接着 1 个或多个数字(被捕获),接着是一个或多个空格,然后是一个或多个非空格、非 & 字符(被捕获)。

2013-06-13 21:24:18