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函数
但我更喜欢简单的代码。
另外,括号给了我类似的错误。
答案 0 :(得分:9)
Lua模式中的转义字符为%
,而不是\
。所以使用这个:
word=str:match("%((%a+)%)")
如果您只需要一个匹配项,则不需要gmatch
循环。
要在方括号中捕获字符串,请使用类似的模式:
word=str:match("%[(%a+)%]")
如果捕获的字符串不完全由字母组成,请使用.-
代替%a+
。
答案 1 :(得分:4)
lhf的答案可能会为您提供您所需要的内容,但我想提及另一个我觉得未被充分利用的选项,也可能适合您。使用%((%a+)%)
的一个问题是它不适用于嵌套括号:如果您将它应用于类似"(文本(更多)文本)"之类的内容,那么您将会这样做得到"更多"即使你可能期待"文字(更多)文字"。请注意,您无法通过要求匹配第一个右括号(%(([^%)]+)%)
)来修复它,因为它会为您提供"文本(更多"。
但是,您可以使用%bxy
pattern item来平衡x
和y
次出现,并在这种情况下返回(text(more)text)
(您需要使用类似的内容) (%b())
捕捉它)。同样,这可能对您的案件来说有点过分,但有用的是记住并可能帮助遇到此问题的其他人。