ngx.re.match openresty 模块处理点字符的奇怪行为

Strange behaviour of handling handling dot character by ngx.re.match openresty module

我无法理解 Lua 中转义 "special" 个字符。 我读到可以通过在字符前放置 % 来转义点。当我尝试使用匹配正则表达式 ngx.re.match

openresty 和 lua nginx 模块时,奇怪的事情发生了

local path = /offers/xyz:req:test0030-10-title:co/test

local regex = ^/offers/([0-9a-zA-Z_:%-%.]+)/test$"

local matches = ngx.re.match(path, regex) => returns nil

我不明白为什么当我在 %- 之前移动 %. 时它能正常工作。

谁能帮我理解一下?

NGINX uses a PCRE regex library 而 Lua 使用非常有限的 Lua 模式。

在你的例子中,%-% 创建了一个介于 %% 之间的范围(即 %-% 匹配 %),这意味着 [0-9a-zA-Z_:%-%.]+ 模式根本不匹配连字符。

你需要

^/offers/([0-9a-zA-Z_:.-]+)/test$
                      ^^

在字符class的末尾,-表示文字-字符。您不需要在字符 class 内转义 .,从不。

您也可以test your PCRE patterns at regex101.com