我有一些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有什么问题?
答案 0 :(得分:2)
对于初学者来说,你过度匹配了。
您不需要将整个字符串与您的模式匹配。只是你要修改的位。
msg=
是字符串的一部分还是变量赋值?我将假设这是一个变量赋值(特别是给定msg = msg:gsub(...)
。
考虑到尝试:
msg = msg:gsub("^(%w*%s*)([^%s]*)", "%1"..path)
答案 1 :(得分:2)
尝试以下代码。请注意使用1
只进行一次匹配。
msg = msg:gsub("(%s+)(%S+)(%s+)", "%1"..path.."%3",1)