regex - Varnish 3 没有正确解析正则表达式模式

标签 regex varnish varnish-vcl

我正在编写一些生成 PCRE 模式的代码,这些模式用于禁止 varnish 中的对象,但 varnish 有问题告诉我模式无效。

这是我的代码生成的模式之一

(?i)(((^| )page\-2[^ ]*($| )))

这就是 Varnish 告诉我的

 0 Debug        - "REGEX: <missing )>"

13 RxRequest    c BAN
13 RxURL        c /
13 RxProtocol   c HTTP/1.1
13 RxHeader     c User-Agent: curl/7.34.0
13 RxHeader     c Accept: */*
13 RxHeader     c Host: www.test.local
13 RxHeader     c X-Tags: (?i)(((^| )page\-2[^ ]*($| )))

我什至尝试在对此进行测试期间简化模式

page-2[^ ]
page\-2[^ ]

我明白了

 0 Debug        - "REGEX: <missing terminating ] for character class>"

像这样的简单模式可行

page-2.*

我正在运行 varnish-3.0.2 修订版 cbf1284

相关的VCL是

if (req.request == "BAN") {
    ban("obj.http.X-Tags ~ " + req.http.X-Tags);
    error 200 "Banned";
}

并且,很明显原始模式是有效的 Regular expression visualization

最佳答案

显然,正如我在对原始问题的评论中意外发现的那样, Varnish 不喜欢正则表达式中的空格文字。这种情况下的解决方案是用 \s 替换空格文字,它匹配任何空白字符,包括空格、制表符和换行符。

关于regex - Varnish 3 没有正确解析正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24958265/

相关文章:

http-headers - 如何设置 Varnish 缓存控制 header

python 2.7 : How to grep/split lines containing pattern

python - 缓存字符串列表转换为列表

php - Laravel preg_match() : No ending delimiter '/' found

javascript - 重新格式化日期正则表达式

php - 如何高效交付大量 Assets (图片)?

Varnish -如何在重新获取时为所有客户端提供过时的内容?

varnish4 与 varnish3 - 优雅行为

varnish - 设置我的第一个 Varnish 缓存服务器

python - 如何使用 Gunicorn 和 Varnish 运行 Flask?