【问题标题】:Lua Script match multiple wordLua 脚本匹配多个单词
【发布时间】:2022-01-07 15:43:18
【问题描述】:

我第一次尝试Lua脚本,我想匹配字符串(用户代理),多个子字符串在匹配时排除它们。

pattern 字符串为 User-Agent 模式,多个字符串分别为 google、safari 和 edge

 local m, err = ngx.re.match(ngx.req.get_headers()['User-Agent'], "(*google*|*safari*|*edge*)", "io")
    if not m
    then
      ..
    end

问题 User-Agent contains google, safari, edge string 在我的请求中仍然存在。

例如用户代理:

Mozilla/5.0 (**google**; CPU iPhone OS 14_4 like Mac OS X) 
Mozilla/5.0 (**safari**; CPU iPhone OS 15_1 like Mac OS X) 
Timescode_RESTClient **edge** alpha

我想排除它们。

【问题讨论】:

  • 这看起来像您在 lua 中使用 regex 库而不是 lua-pattern,对吗?
  • 是的就是这样
  • 有什么帮助吗?
  • “我的请求中仍然存在边缘字符串”是什么意思?您没有对您的请求做任何事情,并且您的正则表达式看起来无效(ngx.re 使用 PCRE 表达式) - 我猜 err 包含错误消息
  • 我的意思是,用户代理的请求在正则表达式上仍然匹配,我无法排除它们,所以我的正则表达式不正确

标签: regex nginx lua openresty lua-patterns


【解决方案1】:

ngx.re.match 使用 PCRE 正则表达式,其中 * 的意思大致是“前面的任何内容的零次或多次重复”,因此您必须对其进行转义:(\*google\*|\*safari\*|\*edge\*)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    相关资源
    最近更新 更多