用于获取变量数组的Varnish Regular Expression

时间:2014-11-03 23:53:07

标签: regex varnish-vcl

我希望从varnish中的URL中提取get变量值。有问题的get变量名为“source”,可能是也可能不是数组。我想把源和逗号的值分开。将URL放入我想要的正则表达式将产生以下结果:

  • t.com/?source=的 1
    • 1
  • t.com/?a=1&source=的 1
    • 1
  • t.com/?source [] = 1
    • 1
  • t.com/?source [] = 1 &安培;源[] = 2
    • 1,2
  • t.com/?a=1&source [] = 1 &安培;源[] = 2
    • 1,2
  • t.com/?a=1&source [] = 1 &安培;源[] = 2 &安培;源[] = 3
    • 1,2,3

我已经创建了正确匹配每个案例的正则表达式,尽管我对捕获组的经验很少,无法替换。这就是我构建的内容:

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

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

1 个答案:

答案 0 :(得分:1)

由于清漆的功能确实有限(没有数组操作,循环,......),所以这样做的方法是应用两个正则表达式:

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

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

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

    使用,$并替换为空字符串=&gt; DEMO