为什么JMeter的以下Regex提取器总是返回默认值?

时间:2015-03-23 21:34:32

标签: regex jmeter jmeter-plugins

根据请求的响应数据。

<li><a href="xyzw.do?ab=1111111111110&amp;method=abcde&amp;maintab=D&_UID_=111Y-T00O-U00U-PCDE-ZA7C-QQ99-0I00-0550" target="_top">
                    Letter</a>

以下是我的正则表达式提取器值

reference name : val
regular expression : <li><a href="abcde.do?ab=(.+?)
Template : $1$
match : -1
default value : error

我希望提取 ab 的值。在这种情况下1111111111110

我尝试了以下内容:

  1. (.+?)更改为(.+)(\d+)等。
  2. -1更改为0
  3. 以上尝试并没有给出任何丰硕的成果。我总是看到&#39;错误&#39;分配给&#39; val&#39;

    其他信息:有几个<li></li>个阻止,但只有一个<li></li>阻止其中包含xyzw.do

3 个答案:

答案 0 :(得分:0)

使用正则表达式解析HTML并不是最好的选择:Using regular expressions to parse HTML: why not?

除了HTML解析问题之外,这还不会处理另一个参数顺序,例如:xyzw.do?method=abcde&amp;ab=1111111111110&amp;maintab=D&_UID_=111Y-T00O-U00U-PCDE-ZA7C-QQ99-0I00-0550不匹配。试图在没有首先进行实际的HTML解析的情况下处理这个问题会让你陷入永无止境的屏幕刮痧绝望之中。


你的正则表达式<li><a href="abcde.do?ab=(.+?)有一些需要转义的特殊字符:它表示&#34; e后跟任何字符&#34;,它还说&#34; o&#34;是可选的(因此abcde.doab=会匹配,abcdeXdab=也会匹配 - 但包含问号会导致其失败)。

.+也意味着它将匹配字符串的其余部分。 +之后的?贪婪修饰符无关紧要,因为没有以下模式可以结束匹配。

工作正则表达式:<a href="xyzw\.do\?ab=(\d+)

请参阅https://regex101.com/r/qW1iF7/1

答案 1 :(得分:0)

这个正则表达式应该适用于这种情况,

\?ab=(\d+)

Regex101 Demo

它使用group capture

的概念

答案 2 :(得分:0)

应该如下简单:

  • 参考名称:val
  • 正则表达式:ab=(.+?)&
  • 模板:$1$

您可以使用View Results Tree侦听器根据响应测试正则表达式:

Regex Tester

有关详细了解测试设计或执行问题的详细信息,请参阅How to debug your Apache JMeter script指南。