LoadImpact / Lua中的正则表达式

时间:2014-07-06 06:28:23

标签: lua string-matching lua-patterns

我想在LoadImpact(Lua)的源代码中捕获以下关键字并获取'nil value'。

捕获关键字 - 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%/([^%/])%/"))

但是我的值是存储在变量中的。你能建议吗?

2 个答案:

答案 0 :(得分:1)

由于您想要从字符串的(近端)部分捕获字母数字,您可以使用$

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

您正在调用print函数。由于print不返回任何内容,因此您不会将变量存储在key

只需使用以下内容:

local key = body:match "form_key/([^/])/"

答案 1 :(得分:0)

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