为什么这个lua gsub无法正常工作?

时间:2014-10-03 01:23:41

标签: lua

我有一些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有什么问题?

2 个答案:

答案 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)