lua - 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
它不起作用,有什么推荐的参考吗?
解决方案
乍一看,这有几处不对劲。
1. 你只检查=
在您的测试数据中,您似乎有key = value和key : value的案例,但您的模式只检查=
; 将其替换[=:]
为简单的修复。
2.不能平衡引号
我不知道您希望它如何工作,但[[%b""]]
只是在两个字符之间找到最短的字符串"
,就像那样[[".-"]]
。如果这是您的意图,那么使用它编写它并没有错%b
。
3. 只是不要
由于我不知道上下文,我不能说这是否真的是一个坏主意,但它看起来确实是一个非常脆弱的解决方案。如果这是一个选项,我建议考虑替代方案并使用更强大的东西。
至于更好的选择会是什么样子,我不能在不了解您的要求的情况下说。也许将数据规范化为 Lua 表并以password
统一的方式替换键?这将确保数据要么被清理,要么在解析过程中出错。
除此之外,如果您告诉我们它是如何不起作用的,那将会有所帮助。阅读别人的代码时很容易漏掉错误,但了解代码的不当行为对实际发现问题有很大帮助。
编辑:
4. 你甚至没有去掉括号
您甚至没有[]
从其他堆栈溢出答案中删除。显然,如果不进行任何修改,这是行不通的。
推荐阅读
- php - 在 PHP 电子邮件中发送信息的 HTML 5 表单
- android - 为什么当我尝试将 firebase 添加到我的 Android 项目时会发生此错误?
- html - div 边框上的 SVG clipPath
- jquery - 如何在 step js 或 tab js 中使用 Croppie?它在步骤 js 中不起作用
- azure - 为 Azure 公共 IP 设置密码
- javascript - IntelliSense 不适用于我自己的 React 组件库
- typescript - 是否可以从 Typescript 中的非构造方法参数推断出泛型类类型?
- angular - 使用相对 URL 时如何使用 HTTP 传输状态
- html - 将背景图像放在单独的 div 中
- node.js - 如何在 VSCode 中调试 nodemon 项目