首页 > 解决方案 > lua 子字符串替换 2 模式

问题描述

由于使用 nginx lua (kong gateway) 想替换 from

{"body":"\r\n  \"username\": \"sampleUser\",\r\n  \"password\": \"samplePassword\",\r\n"}

{"body":"\r\n  \"username\": \"sampleUser\",\r\n  \"password\": \"***REDACTED***\",\r\n"}

username=sampleUser&password=samplePassword

username=sampleUser&password=***REDACTED***

"password" : "krghfkghkfghf"

"password" : "***REDACTED***"

我确实尝试了示例https://stackoverflow.com/a/16638937/712063

local function replacePass(configstr, newpass)
return configstr:gsub("(%[\"password\"%]%s*=%s*)%b\"\"", "%1\"" .. newpass .. "\"")
end

它不起作用,有什么推荐的参考吗?

标签: luapattern-matching

解决方案


乍一看,这有几处不对劲。

1. 你只检查=

在您的测试数据中,您似乎有key = valuekey : value的案例,但您的模式只检查=; 将其替换[=:]为简单的修复。

2.不能平衡引号

我不知道您希望它如何工作,但[[%b""]]只是在两个字符之间找到最短的字符串",就像那样[[".-"]]。如果这是您的意图,那么使用它编写它并没有错%b

3. 只是不要

由于我不知道上下文,我不能说这是否真的是一个坏主意,但它看起来确实是一个非常脆弱的解决方案。如果这是一个选项,我建议考虑替代方案并使用更强大的东西。

至于更好的选择会是什么样子,我不能在不了解您的要求的情况下说。也许将数据规范化为 Lua 表并以password统一的方式替换键?这将确保数据要么被清理,要么在解析过程中出错。


除此之外,如果您告诉我们它是如何不起作用的,那将会有所帮助。阅读别人的代码时很容易漏掉错误,但了解代码的不当行为对实际发现问题有很大帮助。


编辑:

4. 你甚至没有去掉括号

您甚至没有[]从其他堆栈溢出答案中删除。显然,如果不进行任何修改,这是行不通的。


推荐阅读