5

我想提取 Jmeter 中最后一次出现的正则表达式。我使用正则提取器表达式来执行此操作,但我无法得到最后一次出现。

我试过这个:

  • 正则表达式:"var1":([^"]+),"var2"
  • 模板:$1$
  • 比赛编号:-1
  • 默认值:expression_matchNr

然后在我的脚本中我使用了 ${expression}变量

我已经测试了expression_matchNr但它给了我匹配的数量。

我应该在“匹配号: ”中输入什么?

提前致谢

4

2 回答 2

6

如果您有以下输出:

expression=foo
expression_1=foo    
expression_2=bar
expression_3=**what you looking for**
expression_matchNr=3

您可以使用 JMeter 的__V函数来获取expression_3变量的值

根据函数的描述

例如,如果有变量 A1、A2 和 N=1:

  • ${A1}- 工作正常
  • ${A${N}}- 不起作用(嵌套变量引用)
  • ${__V(A${N})}- 工作正常。A${N} 变成 A1,__V 函数返回 A1 的值

因此,在您的情况下,无论有多少匹配项,返回最后一个匹配项的函数如下所示:

${__V(expression_${expression_matchNr})}

请参阅如何使用 JMeter 函数系列文章,了解函数还能做什么。

于 2014-10-30T08:56:45.937 回答
0

不幸的是,JMeter 核心不支持 -1,-2... 表示最终/倒数第二个等符号。但是,您可以使用负前瞻来找到最终的发生

我偶然发现了这个问题,对我来说,我使用以下方法解决了它:

[\s\S]*("var1":([^\"]+),"var2")(?!$1$)

模板:$2$

解释:匹配任何东西直到 (..1..) - 发生在之后不可能匹配 (..1..) 的地方。返回 (..2..)

也是该项目的第一次出现:

 ("var1":([^\"]+),"var2")(?!$1$)[\s\S]*

至于效率,这将整个查询 [\s\S]* 保存在一个变量中,所以它有点重,我没有测试它是否拉太多内存如果是,考虑使用 javaScript 或 JQuery 确实支持最后一个对象方法

于 2018-02-07T13:23:27.353 回答