lua模式匹配:分隔捕获

时间:2013-06-13 20:57:40

标签: lua pattern-matching lpeg

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

2 个答案:

答案 0 :(得分:2)

  1. &(%d+)(.-)&匹配&1 first &
  2. 上留下2 second &4 fourth \\进行匹配
  3. 您的图案与任何其他项目不匹配

答案 1 :(得分:1)

如果您知道这些值是一个单词,那么这应该有效:

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

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