gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:28:46 26 4
gpt4 key购买 nike

假设我有这样一个字符串。

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 操作即可将捕获传递给您的函数。 One possible mode of operation of string.gsub takes a function as an argument and passes it a string/array of strings representing the capture(s) every time it finds a match:

The last use of captured values is perhaps the most powerful. We can call string.gsub with a function as its third argument, instead of a replacement string. When invoked this way, string.gsub calls the given function every time it finds a match; the arguments to this function are the captures, while the value that the function returns is used as the replacement string.

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

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

并且您的 stringDecide 函数将不加修改地工作,as you can see .

在您现有的代码中,您想要发生的是 string.gsub 将为每个匹配项调用 stringDecide,将捕获的字符串替换为字符串参数stringDecide 每次调用,但实际上发生的是 stringDecide 之前使用文字参数 "%1" 被调用一次string.gsub 甚至被调用,它按预期返回 "ERROR",基本上将您的 string.gsub 调用扩展到 string。 gsub(a, '{(.-)}', "错误").

关于string - 如何将捕获的内容与lua中的另一个字符串进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23118909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com