【发布时间】:2017-07-13 22:44:30
【问题描述】:
我是 lua 脚本语言的新手,所以只是尝试使用这种语言。 我有一项任务将解析浏览器用户代理字符串并返回浏览器信息。
虽然我在 lua 上做了很多研发以获得可靠的 LUA 库来完成这项工作,但不幸的是我还没有找到任何人。
所以我尝试通过在我的 lua 脚本中使用一些 PHP UA 代理库逻辑来实现它。根据 PHP 库(php us parser),它对所有可能的用户代理字符串都有自己的正则表达式文件,因此它实际上将所有这些字符串存储在 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 值
即使我也尝试过这种模式
local pattern = [[(Chrome|Chromimum)/%d+]
现在它只返回一个匹配项,即“Chrome”,它应该返回这样的结果
[0] => Chrome/39.0.2171
[1] => Chrome
[2] => 39
[3] => 0
[4] => 2171
每个索引代表浏览器不同的值,如浏览器名称、版本、操作系统名称等。
非常感谢任何帮助。
【问题讨论】:
标签: lua user-agent string-matching lua-patterns