2014-10-03 61 views
1

我有一些lua代码是rest API的一部分。我正在扩展它来处理重定向。 但是,我遇到了gsub问题。为什么这个lua 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

你确定你的字符串有'\ r \ N'换行符呢? – 2014-10-03 01:39:28

+0

是的,这就是COM从服务器返回。 HTTP响应 – Matt 2014-10-03 01:43:34

回答

2

对于初学者,你是过度匹配。

您不需要将整个字符串与您的模式匹配。只是你想修改的位。

msg=部分字符串还是变量赋值?我会认为是一个变量赋值(尤其是考虑msg = msg:gsub(...)

鉴于尝试:。

msg = msg:gsub("^(%w*%s*)([^%s]*)", "%1"..path) 
2

尝试下面的代码,注意用1做的只是一场比赛

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