在LoadImpact/Lua中的正则表达式

我正在尝试从 LoadImpact(Lua)源代码中获取以下关键字并获得“nil value”:

要捕获的关键字 - sf6HxIvNKKsv1jD4

来自正文 - /product/392/form_key/sf6HxIvNKKsv1jD4/')">

我尝试了这个,但出现了“nil value”错误 -

local key = string.match(body, 'form_key%/([^"]*)%/')

谢谢 Avinash,hjpotter。

基本上,我正在尝试将 form_key(来自源代码)后面的动态密钥捕获到变量中,然后在脚本中用该变量替换关键字。这将使我的脚本动态地适应应用程序中发生的动态关键字更改。

为此,我使用以下代码 -

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%/([^%/])%/"))

但是变量中存储的是 nil 值。请提供建议?

点赞
用户3297613
用户3297613

下面的正则表达式将匹配距离字符串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函数打印捕获的字符。

2014-07-06 07:32:05
用户1190388
用户1190388

由于您想从字符串的(接近)末尾捕获字母数字字符,因此可以使用 $

local s = [[/product/392/form_key/sf6HxIvNKKsv1jD4/')">]]
local key = s:match "(%w+)/'%)\">$"

您正在调用“print”函数。由于print不返回任何内容,因此您无法获取存储在“key”中的变量。

只需使用以下内容:

local key = body:match "form_key/([^/])/"
2014-07-06 07:52:27