【问题标题】: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,它平衡了xy 的出现,在这种情况下将返回(text(more)text)(您需要使用(%b()) 之类的东西来捕获它)。同样,这对您的情况来说可能是多余的,但记住这一点很有用,并且可能会帮助遇到此问题的其他人。

      【讨论】:

      • 感谢您提供更多信息。你的 Lua IDE 很棒!
      猜你喜欢
      • 1970-01-01
      • 2013-02-04
      • 2016-03-24
      • 1970-01-01
      • 2016-08-30
      • 2012-07-15
      • 1970-01-01
      • 2023-03-16
      • 2017-12-03
      相关资源
      最近更新 更多