【发布时间】:2013-06-06 12:07:22
【问题描述】:
我有一个脚本
local fields = redis.call('hkeys', 'a:hash:full:of:stuff');
local retval = {};
for i, field in pairs(fields) do
if((string.match(tostring(field),'ev')) ~= nil) then
retval[i] = {field, (string.match(tostring(field),'ev') ~= nil) }
end
end
return retval
此脚本返回一个空列表
当我将 if 语句更改为看起来像时
if((string.match(tostring(field),'.')) ~= nil) then
...
我得到了一个长长的列表,其中包括以下内容
...
...
60) 1) "applet:1:metric:viewelement:20130607"
2) (nil)
61) 1) "applet:1:total_events:20130529"
2) (integer) 1
...
...
如果我用
替换 if 语句if(1)
我得到相同的长键列表
我也尝试过使用string.find,它也有类似的行为。
似乎是一个模式的唯一一点是,如果匹配的字符串在字符串中出现多次,或者如果它出现在开头,则if 语句将通过。我不能确定这一点,但它可能会有所帮助。
我正在使用以下命令运行此脚本
$ redis-cli eval "$(cat get_keys.lua)" 0
【问题讨论】:
标签: string lua redis match string-matching