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

Nginx 检查元素是否位于逗号分隔字符串中的有效方法?,nginx,lua,openresty,Nginx,Lua,Openresty,我有一个黑名单,比如“12,3,4,5,6789” 我试过了 set = {} for element in string.gmatch("12,3,4,5,6,789", "([^"..", ".."]+)") do set[element] = true end if set[...] then ... end 检查元素是否在黑名单中 我的程序将在每个请求中处理多个(元素,黑名单)对,对于每个对,我构建一个集合并只使用一次 我认为这是低效的,并尝试使用string.ma

我有一个黑名单,比如
“12,3,4,5,6789”

我试过了

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

if set[...] then
    ...
end
检查元素是否在黑名单中

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

我认为这是低效的,并尝试使用
string.match
,但lua中的模式不是标准的正则表达式,并且我未能编写一个模式来同时正确匹配黑名单开始/中间/结束处的元素

  • string.match
    是否比构建集合更有效
  • 如何写出正确的句型
  • 有没有更有效的方法

当没有角盒时,模式匹配最容易:

string.match(","..blacklist..",",
             ","..element..",")
简短解决方案:

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:这是我对原始任务的理解

element=“789”;如果(“12,3,4,5,6789”):查找(“%f[%d]”。元素..“%f[%d]”),然后打印(“拒绝访问”)结束
Cool,我愿意接受此选项@Egor Skriptunoftry项目等于1。。。确保您的解决方案适用于包含3、41、15、92、65等项的列表,如
3141592653589793238462643383279
。为什么您认为
find
match
快?显然
find
match
快?