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 内转义 .
,从不。
我无法理解 Lua 中转义 "special" 个字符。
我读到可以通过在字符前放置 % 来转义点。当我尝试使用匹配正则表达式 ngx.re.match
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 内转义 .
,从不。