Регулярные выражения в LoadImpact / Lua

#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 % выполняет то же самое, что (escape-символ) в других языках.

  • ([^%/]*) Фиксирует любой символ, не состоящий из / нуля или более раз.

  • %/ Буквенный / символ.

  • Наконец, захваченные символы печатаются с помощью match функции.