我想提取 Jmeter 中最后一次出现的正则表达式。我使用正则提取器表达式来执行此操作,但我无法得到最后一次出现。
我试过这个:
- 正则表达式:"var1":([^"]+),"var2"
- 模板:$1$
- 比赛编号:-1
- 默认值:expression_matchNr
然后在我的脚本中我使用了 ${expression}变量
我已经测试了expression_matchNr但它给了我匹配的数量。
我应该在“匹配号: ”中输入什么?
提前致谢
我想提取 Jmeter 中最后一次出现的正则表达式。我使用正则提取器表达式来执行此操作,但我无法得到最后一次出现。
我试过这个:
然后在我的脚本中我使用了 ${expression}变量
我已经测试了expression_matchNr但它给了我匹配的数量。
我应该在“匹配号: ”中输入什么?
提前致谢
如果您有以下输出:
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 函数系列文章,了解函数还能做什么。
不幸的是,JMeter 核心不支持 -1,-2... 表示最终/倒数第二个等符号。但是,您可以使用负前瞻来找到最终的发生
我偶然发现了这个问题,对我来说,我使用以下方法解决了它:
[\s\S]*("var1":([^\"]+),"var2")(?!$1$)
和模板:$2$
解释:匹配任何东西直到 (..1..) - 发生在之后不可能匹配 (..1..) 的地方。返回 (..2..)
也是该项目的第一次出现:
("var1":([^\"]+),"var2")(?!$1$)[\s\S]*
至于效率,这将整个查询 [\s\S]* 保存在一个变量中,所以它有点重,我没有测试它是否拉太多内存如果是,考虑使用 javaScript 或 JQuery 确实支持最后一个对象方法