2014-10-09 59 views
7
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功能

但我更喜欢简单的代码。

此外,括号给了我一个类似的错误。

回答

8

转义字符在Lua模式是%,不\。因此,使用这样的:

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

如果你只需要一个匹配,就没有必要为gmatch循环。

为了捕捉在方括号中的字符串中,使用了类似的模式:

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

如果捕捉串不完全由字母,使用.-代替%a+

4

LHF的答案可能给你你需要什么,但我想提一个选择,我觉得利用不足,可能会为你工作为好。使用%((%a+)%)一个问题是,它并不适用于嵌套的括号工作:如果你把它应用到像“(文本(更多)文本)”,你会得到“更多”,即使你可能期待“的文字(以上)的文本”。需要注意的是,你不能问到比赛进行到第右括号(%(([^%)]+)%))修复它,因为它会给你“的文本(更多”。

但是,您可以使用%bxy pattern item,平衡xy事件和意志在这种情况下返回(text(more)text)(你需要使用类似(%b())捕捉到它)。同样,这可能是矫枉过正的情况,但有用牢记并可以帮助别人谁碰到这个问题就来了。

+1

+1,这是我的原始答案。:) – lhf 2014-10-09 20:21:20

+0

感谢您提供其他信息。而你的Lua IDE非常棒! – 2014-10-10 13:00:24

相关问题