【问题标题】:How to capture a string between parentheses?如何捕获括号之间的字符串?
【发布时间】:2014-12-04 07:43:35
【问题描述】:
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 函数
但我更喜欢简单的代码。
另外,括号给了我一个类似的错误。
【问题讨论】:
标签:
string
lua
string-matching
lua-patterns
【解决方案1】:
Lua 模式中的转义字符是%,而不是\。所以用这个:
word=str:match("%((%a+)%)")
如果您只需要一个匹配项,则不需要 gmatch 循环。
要捕获方括号中的字符串,请使用类似的模式:
word=str:match("%[(%a+)%]")
如果捕获的字符串不完全由字母组成,请使用.- 而不是%a+。
【解决方案2】:
lhf 的回答可能会为您提供所需的东西,但我想再提一个我觉得未被充分利用的选项,它也可能对您有用。使用%((%a+)%) 的一个问题是它不适用于嵌套括号:如果将其应用于“(text(more)text)”之类的内容,即使您可能 期望“文本(更多)文本”。请注意,您无法通过要求匹配第一个右括号 (%(([^%)]+)%)) 来修复它,因为它会给您“文本(更多”)。
但是,您可以使用%bxy pattern item,它平衡了x 和y 的出现,在这种情况下将返回(text(more)text)(您需要使用(%b()) 之类的东西来捕获它)。同样,这对您的情况来说可能是多余的,但记住这一点很有用,并且可能会帮助遇到此问题的其他人。