nginx string.match non posix:nginx的字符串匹配函数不符合POSIX标准。

我有一个字符串(str1),想从 "mycode=" 模式后提取任何内容,

local str1 = "ServerName/codebase/?mycode=ABC123";
local tmp1 = string.match(str1, "mycode=%w+");
local tmp2 = string.gsub(tmp1,"mycode=", "");

从日志中可以看到,

tmp1 => mycode=ABC123
tmp2 => ABC123

是否有更好/更有效的方法来做这件事?我相信Lua字符串不遵循POSIX标准(因为代码库的规模)。

点赞
用户258523
用户258523

是的,在你的模式中使用一个捕获来控制从 string.match 返回的内容。

来自 lua 参考手册(我加粗部分):

在字符串s中查找模式的第一个匹配项。如果找到一个匹配项,则match将返回来自模式的捕获;否则将返回nil。如果模式未指定捕获,则返回整个匹配。第三个可选的数字参数init指定从哪里开始搜索;它的默认值为1,可以为负数。

它的工作方式如下:

> local str1 = "ServerName/codebase/?mycode=ABC123"
> local tmp1 = string.match(str1, "mycode=%w+")
> print(tmp1)
mycode=ABC123
> local tmp2 = string.match(str1, "mycode=(%w+)")
> print(tmp2)
ABC123
2015-07-22 14:47:47