gpt4 book ai didi

lua - lua 中的用户代理模式匹配

转载 作者:行者123 更新时间:2023-12-01 14:21:26 25 4
gpt4 key购买 nike

我是 lua 脚本语言的新手,所以只是想尝试一下这门语言。我有一项任务将解析​​浏览器用户代理字符串并返回浏览器信息。

虽然我在 lua 上做了很多研发以获得可靠的 LUA 库来完成这项工作,但不幸的是我还没有找到任何人。

所以我尝试通过在我的 lua 脚本中使用一些 PHP UA 代理库逻辑来实现它。根据 PHP 库(php us 解析器),它有自己的正则表达式文件,用于所有可能的用户代理字符串,因此它实际上将所有这些字符串存储在 JSON 文件中,并将传入的 UA 字符串与这些正则表达式文件数据匹配,并返回传入用户代理的完整详细信息.

现在我也试图在我的 lua 脚本中复制相同的逻辑,但不幸的是,由于 lua 没有它自己的正则表达式库,我试图用它现有的可用函数解析 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`

运行这段代码后,它返回 nil 或 NO 值

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

现在它只返回给我一个匹配项“Chrome”,因为它应该返回这样的结果

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

其中每个索引代表浏览器的不同值,如浏览器名称、版本、操作系统名称等。

非常感谢任何帮助。

最佳答案

Lua patterns与正则表达式不同。以下正则表达式:

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

将被重写为(注意 | 在 lua 模式中是无效的):

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

您可以在 work here 查看以上内容.

关于lua - lua 中的用户代理模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42415973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com