1

问题很简单。我有用于从响应中提取一些数据的正则表达式。它看起来像这样:

<input type="hidden" +name="reportpreset_id" +value="(\w+)" *>${reportPresetName}</td>

问题是变量${reportPresetName}可能包含正则表达式使用的字符,如括号或点。
我试图用\Qand \E(基于that)包围这个变量,但显然这些标记不起作用(显然 Java 支持这个标记,所以我很困惑)。当我添加该标记时,即使对于任何 ${reportPresetName}变量内容,该表达式都失败(即使在没有这些标记的情况下也可以工作)。

我检查了 JMeter 中的函数列表,但没有发现任何有用的东西。有谁知道如何在 JMeter 中转义正则表达式字符?


更新:
当我使用它\Q\E断言它失败时。当我从“查看结果树”中的断言日志中复制正则表达式并在记录的响应数据上对其进行测试时,它可以工作!所以它看起来像是 JMeter 中的某种错误。

4

3 回答 3

3

Jmeter 在 Regexp Extractor 和 Regexp Tester 中使用 jakarta ORO 作为其正则表达式引擎:

但它使用 Java 正则表达式引擎在 HTML/文本查看器中进行搜索。

读:

一个解决方案是在 regexp 之后使用 Groovy 添加一个 JSR223 后处理器,使用以下方法提取 var 并转义 regexp 字符:

org.apache.oro.text.regex.Perl5Compiler.quotemeta(String valueToEscape)

在即将发布的 2.9 版中,已创建了一个新函数来执行此操作:

  • __escapeOroRegexpChars(要转义的字符串,变量名)
于 2012-11-21T06:48:43.273 回答
1

\Q\E在 Java 中工作,请参阅Pattern

但是,在 Java 中,我们使用双反斜杠字符,因此您可能需要使用(\\w+)and,当然,\\Qand \\E

我不确定你的情况,因为我不了解你的上下文,实际上(到目前为止从未使用过 JMeter)。

于 2012-11-20T12:10:15.947 回答
0

如果 JMeter 不支持\\Q并且\\E(我不知道是否支持...),您可以编写自己的函数/过程,在其中将字符串拆分为字符并用转义序列替换每个字符,如下所示:

  • 如果字符是\,则将其替换为\\\\
  • 否则在字符前添加前缀\\

这不是最佳方法,但可以肯定它会根据需要工作。


例如对于输入

This is-a\string 12&$34|!`^5

你会得到

\\T\\h\\i\\s\\ \\i\\s\\-\\a\\\\s\\t\\r\\i\\n\\g\\ \\1\\2\\&\\$\\3\\4\\|\\!\\`\\^\\5
于 2012-11-20T13:13:14.480 回答