Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LoadImpact/Lua中的正则表达式_Lua_String Matching_Lua Patterns - Fatal编程技术网

LoadImpact/Lua中的正则表达式

LoadImpact/Lua中的正则表达式,lua,string-matching,lua-patterns,Lua,String Matching,Lua Patterns,我试图从LoadImpact(Lua)的源代码中捕获以下关键字,并获得“nil值” 要捕获的关键字-sf6HxIvNKKsv1jD4 从正文-/product/392/form_key/sf6HxIvNKKsv1jD4/”> 我试过了,但得到了“零值”效果- local key = string.match(body, 'form_key%/([^"]*)%/') 谢谢阿维纳什,波特 基本上,我试图在变量中的form_key(源代码)之后捕获动态键,然后用该变量替换脚本中的关键字。这将使我的

我试图从LoadImpact(Lua)的源代码中捕获以下关键字,并获得“nil值”

要捕获的关键字-
sf6HxIvNKKsv1jD4

从正文-
/product/392/form_key/sf6HxIvNKKsv1jD4/”>

我试过了,但得到了“零值”效果-

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

谢谢阿维纳什,波特

基本上,我试图在变量中的
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%/([^%/])%/"))

但是,变量中存储了I nil值。您能建议吗?

下面的正则表达式将匹配紧跟其后的字符串,直到下一个
/
符号

> print(string.match("/product/392/form_key/sf6HxIvNKKsv1jD4/')\">", ".*%/([^%/]*)%/"))
sf6HxIvNKKsv1jD4

> print(string.match("/product/392/form_key/sf6HxIvNKKsv1jD4/')\">", "form_key%/([^%/]*)%/"))
sf6HxIvNKKsv1jD4
说明:

  • 在lua中没有前向或后向。它支持分组。
    match
    函数将返回捕获的组中的字符

  • form\u key%/
    在输入字符串上,此模式匹配字符串
    form\u key
    ,后跟一个文本
    /
    。在lua中,
    %
    与其他语言中的
    \
    (转义字符)的操作相同

  • ([^%/]*)
    捕获任何非
    /
    零次或多次的字符

  • %/
    文字符号

  • > print(string.match("/product/392/form_key/sf6HxIvNKKsv1jD4/')\">", ".*%/([^%/]*)%/"))
    sf6HxIvNKKsv1jD4
    
  • 最后,通过
    match
    功能打印捕获的字符


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

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

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

只需使用以下命令:

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

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