【问题标题】:Regular expressions in LoadImpact / LuaLoadImpact / Lua 中的正则表达式
【发布时间】:2014-08-26 21:56:12
【问题描述】:

我正在寻求从 LoadImpact (Lua) 的源代码中捕获以下关键字并获取“零值”。

要捕获的关键字 - sf6HxIvNKKsv1jD4

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

我试过这个,但得到了一个“零值”的努力 -

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 值被存储在变量中。你能推荐一下吗?

【问题讨论】:

  • 注意:Lua 模式不是正则表达式。它们很相似,但模式要弱一些,以保持它们的实现简单。

标签: lua string-matching lua-patterns


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    只需使用以下内容:

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

    【讨论】:

      猜你喜欢
      • 2021-05-21
      • 1970-01-01
      • 2022-01-11
      • 2011-06-12
      • 2023-03-22
      • 2019-01-23
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      相关资源
      最近更新 更多