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

我遇到了一个问题,不太理解 Lua 中“特殊”字符的转义。 我读到,小数点可以通过在字符前面加上 % 进行转义。但当我尝试使用 openresty 和 nginx 的 lua 模块匹配正则表达式时,出现了奇怪的情况 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) => 返回 nil

我不明白为什么在将 %. 移动到 %- 前面时,它就可以正常工作。

有人可以帮我了解一下吗?

点赞
用户3832970
用户3832970

NGINX使用PCRE正则表达式库,而Lua使用非常有限的Lua模式。

在您的情况下,% -%之间创建一个范围(即% -%匹配),这意味着[0-9a-zA-Z_:%-%。]+模式根本不匹配连字符。

你需要

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

在字符类的末尾,-表示一个字面的-字符。您不需要在字符类中转义.,永远不需要。

您还可以在regex101.com上测试您的PCRE模式

2018-06-14 21:39:28