【问题标题】:Matching everything in a cookie string except the value after a specific key匹配 cookie 字符串中的所有内容,除了特定键之后的值
【发布时间】:2015-12-18 15:34:43
【问题描述】:

Cookie 字符串:

ViewerUserId=134; ThisUserId=124; session=ntrhtrh5ttrg54htrth54654654trtrgtgtrgtr

我有Varnish,它使用 PCRE 来缓存内容,我想使用正则表达式来匹配除 ThisUserId 之后的值之外的所有内容,在这种情况下,它应该是 124

我可以通过使用ThisUserId=([0-9]+)\b(?:^|;\s*)ThisUserId=(.*?)(?:;|,(?!\s)) 来提取124,但是,要在Varnish 中设置一个变量,我需要匹配除目标值之外的所有内容,然后将匹配的字符串替换为空字符串,有点像这样:

set req.http.ThisUserId = regsub(req.http.Cookie,"MATCH_EVEYRTHING_EXCEPT_THISUSERID","");

set req.http.ViewerUserId = regsub(req.http.Cookie,"MATCH_EVEYRTHING_EXCEPT_VIEWERUSERID","");

if(req.http.ViewerUserId == req.http.ThisUserId){
      return(pass); // Don't cache if viewer is browsing his own pages
}

谁能给我一个例子来匹配特定字符串后面的未知值?

【问题讨论】:

    标签: regex cookies varnish pcre


    【解决方案1】:

    您可以通过反向引用来做到这一点。这意味着您选择带有括号的正则表达式的某些部分,然后可以在替换字符串中引用它们。所以,例如:

    set req.http.ThisUserId = regsub(req.http.Cookie,".*ThisUserId=(\d+).*","\1");
    set req.http.ViewerUserId = regsub(req.http.Cookie,".*ViewUserId=(\d+).*","\1");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-25
      • 2022-06-28
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      相关资源
      最近更新 更多