#lua #string-matching #lua-patterns
#lua #сопоставление строк #lua-шаблоны
Вопрос:
Я пытаюсь перехватить следующее ключевое слово из исходного кода в LoadImpact (Lua) и получить «нулевое значение».
Ключевое слово для захвата — sf6HxIvNKKsv1jD4
Из тела — /product/392/form_key/sf6HxIvNKKsv1jD4/')">
Я пробовал это, но получил «нулевое значение» из-за —
local key = string.match(body, 'form_key%/([^"]*)%/')
Спасибо Avinash, hjpotter.
По сути, я пытаюсь записать динамический ключ после form_key
(из исходного кода) в переменной, а затем заменить ключевое слово в скрипте на эту переменную. Это сделает мой скрипт динамичным, чтобы учитывать изменения в динамических ключевых словах, происходящие в appln.
Для этого я использую следующий код —
local pages = http.request_batch({ {"GET", "http://example.com/";, response_body_bytes=4096} })
local body = pages[1]['body']
local key = print(string.match(body, "form_key%/([^%/])%/"))
Однако в переменной сохраняется нулевое значение. Не могли бы вы, пожалуйста, предложить?
Комментарии:
1. Примечание: Шаблоны Lua не являются регулярными выражениями. Они похожи, но шаблоны немного слабее, чтобы упростить их реализацию.
Ответ №1:
Поскольку вы хотите записать буквенно-цифровые символы из (ближней) конечной части вашей строки, вы можете использовать $
:
local s = [[/product/392/form_key/sf6HxIvNKKsv1jD4/')">]]
local key = s:match "(%w )/'%)">$"
Вы вызываете print
функцию. Поскольку print ничего не возвращает, вы не получите переменную, хранящуюся в key
.
Просто используйте следующее:
local key = body:match "form_key/([^/])/"
Ответ №2:
Приведенное ниже регулярное выражение соответствовало бы строке, которая была сразу после строки, form_key/
вплоть до следующего /
символа.
> print(string.match("/product/392/form_key/sf6HxIvNKKsv1jD4/')">", ".*%/([^%/]*)%/"))
sf6HxIvNKKsv1jD4
или
> print(string.match("/product/392/form_key/sf6HxIvNKKsv1jD4/')">", "form_key%/([^%/]*)%/"))
sf6HxIvNKKsv1jD4
Объяснение:
-
В lua нет предварительного просмотра. Он поддерживает группировку.
match
функция вернет символы из захваченной группы. -
form_key%/
Во входной строке этот шаблон соответствует строке, за которойform_key
следует литерал/
. В lua%
выполняет то же самое, что -
([^%/]*)
Фиксирует любой символ, не состоящий из/
нуля или более раз. -
%/
Буквенный/
символ. -
Наконец, захваченные символы печатаются с помощью
match
функции.