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
快?