LUA中的用户代理模式匹配



我是Lua脚本语言的新手,因此只需尝试使用此语言即可。我有一个将解析浏览器用户代理字符串并将返回浏览器信息的任务。

尽管我在lua上做了很多R&

因此,我尝试通过在我的LUA脚本中使用一些PHP UA代理库逻辑来通过它来实现。根据PHP库(PHP US Parser),它具有所有可能的用户代理字符串的正则文件,因此它实际上将所有这些字符串存储在JSON文件中,并将输入的UA字符串与这些Regex文件数据匹配,并返回了输入用户代理的完整详细信息。

现在,我还试图在我的LUA脚本中复制相同的逻辑,但是不幸的是,由于Lua没有自己的Regex库,因此我试图用其现有的可用函数对UA字符串进行解析。现在我坚持在这里实现逻辑。

这是我的UA字符串

local ua ="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36"

这是此字符串的正则码

local pattern =    [[@(Chromium|Chrome)/(d+).(d+)(?:.(d+))?@]]

这是我的代码从ua字符串获得确切匹配

for w in s:gmatch(pattern) do
    ngx.say(w)
end`

运行此代码后,它将返回我零或无值

即使我也尝试过这种模式 local pattern = [[(Chrome|Chromimum)/%d+]

现在,它只返回我只有一场" chrome"的一场比赛,因为它应该像以下结果一样返回结果

[0] => Chrome/39.0.2171
[1] => Chrome
[2] => 39
[3] => 0
[4] => 2171

每个索引表示浏览器不同的值,例如浏览器名称,版本,OS名称等

任何帮助都非常感谢。

luA模式与正则态度不同。以下言论:

(Chromium|Chrome)/(d+).(d+)(?:.(d+))?

将被重写为(请注意,|在LUA模式中无效):

(Chrom[eium]+)/(%d+)%.(%d+)%.?(%d*)

您可以在此处的工作中看到上述内容。

最新更新