我正在尝试从reference manual学习模式(在string.gmatch等中实现)在Lua 5.3中的工作方式。

(感谢@greatwolf使用*纠正我对模式项的解释。)

我想做的是匹配'(%(.*%))*'(由()所包围的子字符串;例如'(grouped (etc))'),以便它记录



或者



但是它什么也不做(online compiler)。

local test = '(grouped (etc))'

for sub in test:gmatch '(%(.*%))*' do
    print(sub)
end

最佳答案

另一种可能性-使用递归:

function show(s)
  for s in s:gmatch '%b()' do
    print(s)
    show(s:sub(2,-2))
  end
end

show '(grouped (etc))'

10-01 00:46