我错了,被php的一个例子搞晕了,写成这样就好了
local function var_dump(value)
ngx.say("(string)("..string.len(value)..") "..value)
end
local binary = "\x09Example string\x0A"
var_dump(binary)
local r
r = ngx.re.gsub(binary, "^[\\x00-\\x09]+", "", "oj")
var_dump(r)
r = ngx.re.gsub(binary, "^[\\x00-\\x0a]+", "", "oj")
var_dump(r)
r = ngx.re.gsub(binary, "[\\x00-\\x0a]+$", "", "oj")
var_dump(r)
r = ngx.re.gsub(binary, "[\\x00-\\x1a]+$", "", "oj")
var_dump(r)
Lance
2012/10/4 Lance
<lance...@gmail.com>
hi agentzh,
我在尝试用 ngx.re.gsub 实现 trim 时,发现正则表达式有些表现比较奇怪,麻烦帮忙分析一下问题出在哪里,抱歉例子里用了 content_by_lua_file,因为太多的转义更晕了
server
{
listen 81;
access_log /data/logs/81.access.log combined;
error_log /data/logs/81.error.log warn;
location / {
content_by_lua_file 'conf/check.lua';
}
}
以下是 check.lua 文件
local function var_dump(value)
ngx.say("(string)("..string.len(value)..") "..value)
end
local binary = "\x09Example string\x0A"
var_dump(binary)
local r
r = ngx.re.gsub(binary, "^[\\x00..\\x09]+", "", "oj")
var_dump(r)
r = ngx.re.gsub(binary, "^[\\x00..\\x0a]+", "", "oj")
var_dump(r)
r = ngx.re.gsub(binary, "[\\x00..\\x0a]+$", "", "oj")
var_dump(r)
r = ngx.re.gsub(binary, "[\\x00..\\x1a]+$", "", "oj")
var_dump(r)
以下是输出结果
(string)(16) Example string
(string)(15) Example string
(string)(16) Example string
(string)(15) Example string
(string)(16) Example string
第一行输出是源串,没问题,第二行输出替换结果,第一个 \x09 被替换,正常,第三行结果奇怪了,按说这样写的正则表达式是第二行的超集,但实际没有匹配出来。
于是换一种写法,匹配行尾,第四行结果输出正常,替换掉了 \x0a,但第五行输出结果又再次替换失败。
不太确定这个是pcre的问题还是re.gsub的问题,麻烦帮忙看一下?
环境,ngx_openresty 1.2.3.5,pcre 8.31静态编译,启用pcre-jit
谢谢
Lance