Php 有效地将Redis中存储的正则表达式与我的输入匹配

Php 有效地将Redis中存储的正则表达式与我的输入匹配,php,regex,redis,Php,Regex,Redis,是否可以高效地存储Redis Set/Hash中存储的匹配正则表达式模式,并以高效的方式匹配我的输入? 我目前的方法是首先查找需要匹配输入的模式,然后实际执行“preg_匹配”。这有点麻烦,效率不高。有人能帮我提高效率吗?我正在使用predis客户端库。 如何在我的redis中存储内容: SADD regex [a-z]+[1-9]+@ prorogue[0-9]+@ ... and so on. 您应该研究使用Redis的内置Lua脚本功能。Lua提供模式匹配功能(例如string.ma

是否可以高效地存储Redis Set/Hash中存储的匹配正则表达式模式,并以高效的方式匹配我的输入?
我目前的方法是首先查找需要匹配输入的模式,然后实际执行“preg_匹配”。这有点麻烦,效率不高。有人能帮我提高效率吗?我正在使用predis客户端库。

如何在我的redis中存储内容:

SADD regex [a-z]+[1-9]+@ prorogue[0-9]+@ ... and so on.  

您应该研究使用Redis的内置Lua脚本功能。Lua提供模式匹配功能(例如
string.match
),但请注意

与其他几种脚本语言不同,Lua不使用POSIX正则表达式(regexp)进行模式匹配()

在伪Redis Lua代码中,这看起来像:

local re = redis.call("SMEMBERS", KEYS[1])
for _, r in pairs(re) do
  if string.match(ARGV[1], r) then
    return 1
  end
end
return 0

您的代码当前看起来像什么?请澄清为什么您觉得它很麻烦和低效。我觉得它很麻烦,因为我认为从Redis获取每个正则表达式(可能有数百个)然后将您的输入与之匹配在计算上是非常详尽的。所以您需要将字符串与Redis中存储的正则表达式模式作为一个集合进行匹配,对吗?好吧,除了从Redis获取它们,然后进行preg_匹配之外,我看不到更有效的方法,除非您可以重新构造数据(例如,将所有模式存储在一个键中,而不是一组)。感谢您的输入。