lua

时间:2017-02-23 12:37:10

标签: lua user-agent string-matching lua-patterns

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

虽然我已经在lua上做了很多R& D来获得可以完成这项工作的实体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值

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

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

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

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

您可以在work here上看到上述内容。