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

时间:2014-10-09 11:34:02

标签: string lua string-matching lua-patterns

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

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

嗨!我想在括号之间抓一个字。

我的代码应打印“已捕获”字符串。

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

我得到了这种语法错误。

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

但我更喜欢简单的代码。

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

2 个答案:

答案 0 :(得分:9)

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

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

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

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

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

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

答案 1 :(得分:4)

lhf的答案可能会为您提供您所需要的内容,但我想提及另一个我觉得未被充分利用的选项,也可能适合您。使用%((%a+)%)的一个问题是它不适用于嵌套括号:如果您将它应用于类似"(文本(更多)文本)"之类的内容,那么您将会这样做得到"更多"即使你可能期待"文字(更多)文字"。请注意,您无法通过要求匹配第一个右括号(%(([^%)]+)%))来修复它,因为它会为您提供"文本(更多"。

但是,您可以使用%bxy pattern item来平衡xy次出现,并在这种情况下返回(text(more)text)(您需要使用类似的内容) (%b())捕捉它)。同样,这可能对您的案件来说有点过分,但有用的是记住并可能帮助遇到此问题的其他人。