【发布时间】:2017-03-11 22:12:09
【问题描述】:
我正在尝试从 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
【问题讨论】:
-
你为什么写
*.而不是.*? -
@EgorSkriptunoff 我想匹配 ( 和 ) 之间的所有内容,根据手册,这是一个模式项,其中字符类必须跟随 * (在这个“跟随”术语中我理解,“在 * 之后声明”)。我认为
.\*最终会使用下一个字符类(在问题示例中,%,%)),与.*%相同,我猜。 -
你错了,所有这些重复字符
*、-、+等都出现在您要匹配的字符类之后。例如匹配字母使用%a*,.*将贪婪匹配任何字符。您的示例仅使用*kleene 星,但之前没有任何内容,因此格式不正确。 -
@greatwolf 感谢您的更正,英语不是我的主要语言,所以我可能无法正确阅读。虽然葡萄牙语有时很相似!
-
对于您的示例,您可以尝试
%a+%s(%(.-%)),这意味着匹配 1 个或多个字母(不区分大小写)后跟可选空格,后跟()中的任何字符。在匹配时捕获括号中的内容。
标签: lua lua-patterns