4

我正在尝试解析一个字符串,例如:&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?谁能解释我的错误?

4

2 回答 2

2
  1. &(%d+)(.-)&火柴&1 first &
  2. 离开2 second &4 fourth \\以匹配
  3. 您的模式与任何其他项目都不匹配
于 2013-06-13T21:08:51.517 回答
1

如果您知道这些值是一个单词,则应该可以:

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

取“&”,后跟 1 个或多个数字(捕获),后跟一个或多个空格,然后是一个或多个非空格、非 & 字符(捕获)。

于 2013-06-13T21:24:18.670 回答