如何在jmeter中获得常规提取器表达式中的最后一个匹配?

时间:2014-10-30 08:33:02

标签: regex jmeter post-processing

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

我试过了:

  • 正则表达式:“var1”:( [^“] +),”var2“
  • 模板:$ 1 $
  • 匹配否: - 1
  • 默认值:expression_matchNr

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

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

我应该在“匹配否:”中添加什么?

提前致谢

2 个答案:

答案 0 :(得分:5)

如果您有以下输出:

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

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

根据功能description

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

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

所以在你的情况下,函数返回最后一个匹配,无论多少匹配将是:

${__V(expression_${expression_matchNr})}

请参阅How to Use JMeter Functions系列文章,了解其他功能可以做些什么。

答案 1 :(得分:0)

不幸的是,JMeter核心不支持-1,-2 ......用于终极/倒数第二等表示法。但是,您可以使用否定预测

找到最终结果

我偶然发现了这个问题,对我来说,我用这样的方法解决了这个问题:

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

模板:$ 2 $

说明: 匹配任何东西直到(..1 ..) - 发生在之后无法匹配(..1 ..)的地方。 返回(.2 ..)

也是第一次出现的项目:

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

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