我正在使用缓存,并且我将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的网址。帮我解决这个问题。
答案 0 :(得分:0)
在这种情况下,用户标识不能跟随任何数字。
cache_store.delete_matched("id=#{current_user.id}([\D]|$)")
匹配以{id}结尾的URL
,或者包含userid后跟除了数字之外的任何内容。
修改强>
在Regexpal上找不到Share
- 按钮,所以我发布了我的结果。请注意,我已复制了regex
字符串,并将#{current_user.id}
替换为94
。蓝色和黄色都是匹配。似乎只有你的例子中的右边是匹配,没有?
修改2
由于OP仍然无法成功删除多个URL
,因此另一次更新。我怀疑周围的代码存在一些错误。此示例正在运行:
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
如果这仍然无法解决您的问题,请考虑发布负责删除URL
的相关功能。同时为这些URL
提供容器。
答案 1 :(得分:0)
尝试cache_store.delete_matched("id=#{current_user.id}")