【问题标题】:Varnish Regular Expression for get variable array用于获取变量数组的清漆正则表达式
【发布时间】:2014-12-30 18:26:54
【问题描述】:

我希望从 varnish 中的 URL 中提取变量值。有问题的 get 变量被命名为“源”,可能是也可能不是数组。我想取 source 的值并用逗号分隔它们。通过我想要的正则表达式输入 URL 将产生以下结果:

  • t.com/?source=1
    • 1
  • t.com/?a=1&source=1
    • 1
  • t.com/?source[]=1
    • 1
  • t.com/?source[]=1&source[]=2
    • 1,2
  • t.com/?a=1&source[]=1&source[]=2
    • 1,2
  • t.com/?a=1&source[]=1&source[]=2&source[]=3
    • 1,2,3

我已经创建了适当匹配每种情况的正则表达式,尽管我对用于替换的捕获组几乎没有经验。这是我构建的:

((\?|\&)source(\[])?=(?P<sources>[^&]+))+

可视化:https://www.debuggex.com/i/_2ib6j-6VKTWE_vV.png

【问题讨论】:

    标签: regex varnish-vcl


    【解决方案1】:

    由于 varnish 的功能确实有限(没有数组操作、循环、...),一种方法是应用两个正则表达式:

    1. 第一个将捕获source 值并将其替换为逗号分隔值

      使用.*?[&amp;?]source(?:\[\])?=([^&amp;=\n]+) 并替换为$1, => DEMO

    2. 第二个将删除尾随的逗号

      使用 ,$ 并替换为空字符串 => DEMO

    【讨论】:

    • 该正则表达式看起来不错,但对于以 source 结尾的 get 变量(例如 utm_source=test)会产生误报。为了解决这个问题,我更新了正则表达式 as follows: .*?(?:\?|&amp;)source(?:\[\])?=([^&amp;=\n]+)
    猜你喜欢
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多