String 如何将捕获的内容与lua中的另一个字符串进行比较

String 如何将捕获的内容与lua中的另一个字符串进行比较,string,lua,gsub,String,Lua,Gsub,假设我有一根这样的绳子 string = "This is just an {example} of a string. {Quite} boring." 在代码中的某个时刻,我想用一个函数来替换花括号中的单词。我翻了翻手册,想出了这个解决办法 function stringModify(a) return string.gsub(a, '{(.-)}', stringDecide("%1")) end function stringDecide(a) if a == "exampl

假设我有一根这样的绳子

string = "This is just an {example} of a string. {Quite} boring."
在代码中的某个时刻,我想用一个函数来替换花括号中的单词。我翻了翻手册,想出了这个解决办法

function stringModify(a)
  return string.gsub(a, '{(.-)}', stringDecide("%1"))
end

function stringDecide(a)
  if a == "example" then
    return "excellent example"
  elseif a == "Quite" then
    return "Not"
  else
    return "ERROR"
  end 
end
只是它没有按照我想要的方式工作。例如,if部分将变量a视为文本“%1”,而不是捕获的内容


如何使捕获的内容得到比较,而不是“%1”字符串的文字解释?

将捕获传递给函数不需要做全部%1工作

最后一次使用捕获的值可能是最强大的。我们可以使用函数作为其第三个参数来调用string.gsub,而不是替换字符串。以这种方式调用时,string.gsub在每次找到匹配项时都调用给定函数;此函数的参数是捕获,而函数返回的值用作替换字符串

考虑到这一点,您可以从现有代码中删除几个字符,以便传递函数而不是调用它:

function stringModify(a)
  return string.gsub(a, '{(.-)}', stringDecide)
end
您的
stringdecise
函数将不经修改地工作


在现有代码中,您希望发生的是
string.gsub
将为每个匹配调用
stringdecise
,每次调用时将捕获到字符串参数中的字符串替换为
stringdecise
,但事实上,在调用
string.gsub
之前,使用文本参数
%1“
调用了一次
stringdecise
,它会像预期的那样返回
“ERROR”
,基本上将
string.gsub
调用扩展到
string.gsub(a),{(.-)},“ERROR”)

谢谢,这正是我想要的。