我是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
其中每个索引代表浏览器不同的值,如浏览器名称,版本,操作系统名称等。
非常感谢任何帮助。
答案 0 :(得分:1)
Lua patterns与正则表达式不同。以下正则表达式:
(Chromium|Chrome)/(\d+)\.(\d+)(?:\.(\d+))?
将被重写为(请注意,|
在lua模式中无效):
(Chrom[eium]+)/(%d+)%.(%d+)%.?(%d*)
您可以在work here上看到上述内容。