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

Jin*_*Lee 7 string lua string-matching lua-patterns

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

for word in str:gmatch("\(%a+\)") do
    print(word) 
end
Run Code Online (Sandbox Code Playgroud)

嗨!我想在括号中捕捉一个单词.

我的代码应该打印"捕获"字符串.

lua: /home/casey/Desktop/test.lua:3: invalid escape sequence near '\('
Run Code Online (Sandbox Code Playgroud)

我得到了这个语法错误.

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

但我更喜欢简单的代码.

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

lhf*_*lhf 10

Lua模式中的转义字符%不是\.所以使用这个:

word=str:match("%((%a+)%)")
Run Code Online (Sandbox Code Playgroud)

如果您只需要一个匹配,则不需要gmatch循环.

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

word=str:match("%[(%a+)%]")
Run Code Online (Sandbox Code Playgroud)

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


Pau*_*nko 6

lhf 的回答可能会给你你需要的东西,但我想再提一个我觉得没有充分利用的选项,也可能对你有用。使用的一个问题%((%a+)%)是它不适用于嵌套括号:如果将它应用于诸如“(text(more)text)”之类的内容,即使您可能期望“text(more)text ”,您也会得到“more” ”。请注意,您无法通过要求匹配第一个右括号 ( %(([^%)]+)%))来修复它,因为它会给您“文本(更多”)。

但是,您可以使用%bxy模式 item,它可以平衡xy出现并(text(more)text)在这种情况下返回(您需要使用类似的东西(%b())来捕获它)。同样,这对您的案例来说可能有点矫枉过正,但记住这一点很有用,并且可能会帮助遇到此问题的其他人。