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

8
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函数。

但我更喜欢简单的代码。

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

2个回答

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

在Lua中使用转义字符时,请使用%代替\

word=str:match("%((%a+)%)")
如果只需要一个匹配项,就不需要使用 gmatch 循环。
要捕获方括号中的字符串,可以使用类似的模式:
word=str:match("%[(%a+)%]")

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


6
lhf的答案可能已经给了你所需的内容,但我想提出另一个选项,我觉得很少使用,也可能适合你。使用“%((%a+)%)”的一个问题是它无法处理嵌套的括号:如果你将其应用于类似“(text(more)text)”这样的内容,你将得到“more”,即使你可能期望得到“text(more)text”。请注意,你不能通过要求匹配第一个右括号(“%(([^%)]+)%)”)来修复它,因为它会给你“text(more”。

然而,你可以使用%bxy 模式项,它平衡xy的出现次数,并在这种情况下返回(text(more)text)(你需要使用类似(%b())的东西来捕获它)。同样,这对于你的情况可能过于复杂,但值得记住,并可能帮助其他遇到此问题的人。


1
感谢您提供的额外信息。您的Lua IDE非常棒! - Jin Su Lee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接