如何捕获括号中的字符串?

str = "fa, (captured)[asd] asf, 31"

for word in str:gmatch("\(%a+\)") do
    print(word)
end

嗨!我想捕获括号之间的一个单词。

我的代码应该打印"captured"字符串。

lua: /home/casey/Desktop/test.lua:3: invalid escape sequence near '\('

然后我得到了这个语法错误。

当然,我可以只找到括号的位置并使用string.sub函数。

但我更喜欢简洁的代码。

另外,括号也给了我类似的错误。

点赞
用户107090
用户107090

Lua 模式中的转义字符是 %,而不是 \。因此使用以下内容:

word=str:match("%((%a+)%)")

如果您只需要一个匹配项,则不需要使用 gmatch 循环。

要捕获方括号中的字符串,请使用类似的模式:

word=str:match("%[(%a+)%]")

如果捕获的字符串不完全由字母组成,请使用 .- 代替 %a+

2014-10-09 11:40:15
用户1442917
用户1442917

lhf的回答很可能已经给了你所需的内容,但是我想提供一种被低估且可能也适用于你的解决方案。使用%((%a+)%)的一个问题是它不能处理嵌套括号:如果你将其应用于类似于"(text(more)text)"的内容,你会得到"more",即使你期望得到的是"text(more)text"。请注意,你不能通过要求匹配到第一个右括号(%(([^%)]+)%))来修复它,因为它会给你返回"text(more)"。

然而,你可以使用 %bxy 模式项,它平衡 xy 的出现次数,将在这种情况下返回(text(more)text)(你需要使用类似于(%b())的内容来捕获它)。同样,这可能对你的情况有些过度解决,但是对于我们谁遇到这个问题,这是有用的。

2014-10-09 18:58:18