Я новичок в языке сценариев lua, поэтому просто пробую свои силы в этом языке. У меня есть одна задача, которая будет анализировать строку пользовательского агента браузера и возвращать информацию о браузере.
Хотя я провел много исследований и разработок на lua, чтобы получить надежную библиотеку LUA, которая выполняет эту работу, но, к сожалению, я никого не нашел.
Поэтому я попытался реализовать это, используя некоторую логику библиотеки агентов PHP UA в моем сценарии lua. В соответствии с библиотекой 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
Где каждый индекс представляет разные значения браузера, такие как имя браузера, версия, имя ОС и т. д.
Любая помощь очень ценится.