检查元素是否在逗号分隔字符串中的有效方法?

时间:2017-08-24 17:12:13

标签: nginx lua openresty

我有一个像"12,3,4,5,6,789"

这样的黑名单

我试过

set = {}
for element in string.gmatch("12,3,4,5,6,789", "([^"..", ".."]+)") do
    set[element] = true
end 

if set[...] then
    ...
end

检查元素是否在黑名单中。

我的程序将为每个请求处理多个(元素,黑名单)对,对于每对我构建一个集合并仅使用它一次。

我认为它效率低并尝试使用string.match,但lua中的模式不是标准的RegEx,我无法编写一个可以匹配黑名单开始/中/结尾元素的模式正确的同时。

  • string.match会比制作一套更有效吗?
  • 如何写出合适的模式?
  • 有没有更有效率的方法?

2 个答案:

答案 0 :(得分:2)

当没有极端情况时,模式匹配最简单:

string.match(","..blacklist..",",
             ","..element..",")

答案 1 :(得分:0)

简短解决方案:

local blacklist = "31,415,9265,3589,7932,3846,2643,383,279"
local item = "383"
blacklist= ","..blacklist..","
if blacklist:find(","..item..",") then
   print("found in the blacklist")
end

ps:这是我对原始任务的理解