lua 子字符串替换 2 模式
lua sub string replace 2 pattern
由于使用 nginx lua(kong 网关)
想更换
来自
{"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***"
我试过样品
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 table 并以统一的方式替换 password
键?这将确保数据在解析过程中被清理或出错。
除此之外,如果您告诉我们如何它不起作用,将会有所帮助。阅读别人的代码时很容易错过错误,但了解代码的异常行为对实际发现问题有很大帮助。
编辑:
4。你连括号都没有去掉
您甚至没有从其他堆栈溢出答案中删除 []
。显然,如果不进行任何修改,那是行不通的。
可能是这样的:
local t = {
[[{"body":"\r\n \"username\": \"sampleUser\",\r\n \"password\": \"samplePassword\",\r\n"} ]],
[[username=sampleUser&password=samplePassword]],
[["password" : "krghfkghkfghf"]]
}
local newpass ="***REDACTED***"
for k,example in pairs(t) do
res = example:gsub('(password[\" :]+)(.-)([\"]+)',"%1"..newpass.."%3")
res = res:gsub("(password=).+","%1"..newpass)
print(res)
end
输出:
{"body":"\r\n \"username\": \"sampleUser\",\r\n \"password\": \"***REDACTED***\",\r\n"}
username=sampleUser&password=***REDACTED***
"password" : "***REDACTED***"
由于使用 nginx lua(kong 网关) 想更换 来自
{"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***"
我试过样品
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 table 并以统一的方式替换 password
键?这将确保数据在解析过程中被清理或出错。
除此之外,如果您告诉我们如何它不起作用,将会有所帮助。阅读别人的代码时很容易错过错误,但了解代码的异常行为对实际发现问题有很大帮助。
编辑:
4。你连括号都没有去掉
您甚至没有从其他堆栈溢出答案中删除 []
。显然,如果不进行任何修改,那是行不通的。
可能是这样的:
local t = {
[[{"body":"\r\n \"username\": \"sampleUser\",\r\n \"password\": \"samplePassword\",\r\n"} ]],
[[username=sampleUser&password=samplePassword]],
[["password" : "krghfkghkfghf"]]
}
local newpass ="***REDACTED***"
for k,example in pairs(t) do
res = example:gsub('(password[\" :]+)(.-)([\"]+)',"%1"..newpass.."%3")
res = res:gsub("(password=).+","%1"..newpass)
print(res)
end
输出:
{"body":"\r\n \"username\": \"sampleUser\",\r\n \"password\": \"***REDACTED***\",\r\n"}
username=sampleUser&password=***REDACTED***
"password" : "***REDACTED***"