为什么这个lua的gsub函数不起作用?

我有一些 Lua 代码,它是 REST API 的一部分。我正在扩展它以处理重定向。然而,我在使用 gsub 函数时遇到了问题。

msg=POST /v2/keys/message?recursive=true&value=hello%20world HTTP/1.1
Host: 172.17.8.101:4001
Content-Length: 0
Accept: */*, application/json, application/x-www-form-urlencoded, text/plain

我想要替换以下代码:

path = "blabla"
msg = msg:gsub("^%w* ([^\r\n]*)\r\n.*", path .. " HTTP/1.1")

以此获得以下结果:

msg=POST blabla HTTP/1.1
Host: 172.17.8.101:4001
Content-Length: 0
Accept: */*, application/json, application/x-www-form-urlencoded, text/plain

但是,我试过的一切都没有匹配并替换。我认为我根本就不理解 Lua 的 gsub 和它的模式匹配方式。gsub 函数有什么问题?

点赞
用户258523
用户258523

首先,你过度匹配了。

你不需要用你的模式来匹配整个字符串。只需匹配需要修改的部分即可。

msg=是字符串的一部分还是变量赋值?我假设这是一个变量赋值(尤其是考虑到msg = msg:gsub(...))。

鉴于此,请尝试:

msg = msg:gsub("^(%w*%s*)([^%s]*)", "%1"..path)
2014-10-03 01:39:07
用户107090
用户107090

尝试使用下面的代码。请注意使用 1 仅进行一次匹配。

msg = msg:gsub("(%s+)(%S+)(%s+)", "%1"..path.."%3",1)

2014-10-03 01:45:23