1

我正在使用缓存,并且我将 user_id 与缓存的页面一起存储,当用户注销时,我需要使用 user_id 清除特定用户的缓存页面的缓存。我使用以下正则表达式删除匹配的 user_id

cache_store.delete_matched("*id=#{current_user.id}*")

当它与第一个数字匹配时,它会删除所有 URL,例如,如果我想删除 id=12,它会删除所有 URL。

"localhost:3000/foo?id=123"
"localhost:3000/foo?id=12"
"localhost:3000/foo?id=129"

我想删除 id=12 的 URL。帮我解决这个问题。

4

2 回答 2

0

在这种情况下,用户 ID 后面不能跟任何数字。

cache_store.delete_matched("id=#{current_user.id}([\D]|$)")

这匹配以URLuserid 结尾,或包含 userid 后跟除数字以外的任何内容。

编辑

在 Regexpal 上找不到Share-button,所以我发布了我的结果。请注意,我已经复制了我的regex字符串并替换#{current_user.id}94. 蓝色和黄色都是匹配的。似乎只有您示例中的正确行是匹配的,不是吗?

在此处输入图像描述

编辑 2

由于OP仍然无法成功删除多个URLs,再次更新。我怀疑周围的代码有问题。此示例正在工作:

id = 94
array = [ "id=94", "id=94a", "id=945" ]
clean = Array.new
regex = Regexp.new('id=' + id.to_s + '([\D]|$)')

for url in array
    if url =~ regex
        clean << url
    end
end

puts clean

如果这仍然不能解决您的问题,请考虑发布负责删除URLs. 还请提供这些容器URL

于 2013-04-23T12:41:20.967 回答
0

尝试cache_store.delete_matched("id=#{current_user.id}")

于 2013-04-23T13:39:16.507 回答