找到正确的正则表达式

时间:2016-01-04 10:51:08

标签: regex jmeter

Jmeter采样器以下列模式返回响应:

  

{&#34;使用者&#34; {&#34;用户id&#34;:1,&#34;名称&#34;:&#34;名1&#34;&#34;电子邮件&#34 ;:&#34; name1@email.com",&#34;作用&#34;:&#34;管理&#34;}&#34;类型&#34;:&#34;无&#34 ;},   {&#34;使用者&#34; {&#34;用户id&#34;:2&#34;名称&#34;:&#34;用户1&#34;&#34;电子邮件&#34;:& #34; user1@email.com",&#34;作用&#34;:&#34;用户&#34;}&#34;类型&#34;:&#34;无&#34;}, {&#34;使用者&#34; {&#34;用户id&#34;:2&#34;名称&#34;:&#34;用户2&#34;&#34;电子邮件&#34;:& #34; user2@email.com",&#34;作用&#34;:&#34;用户&#34;}&#34;类型&#34;:&#34;无&#34;} < / p>

以上标签为多个用户重复

我需要替换“没有”这个词。 (标签&#39;类型&#39;)与&#39; abc&#39;仅适用于电子邮件以&#39; user&#39;开头的用户。 更换后,我需要将整个替换的字符串作为POST请求发送

我在Beanshell后处理器中尝试了以下代码:

response = prev.getResponseDataAsString(); response = response.replaceAll("\"email\":\"user(\\d+)@email.com\",\"role\":\"user\"},\"type\":\"none\"}","\"email\":\"user\\d+@email.com\",\"role\":\"user\"},\"type\":\"abc\"}");

除非在所有匹配模式中将电子邮件更改为userd+@email.com,否则将按预期进行替换。我需要保留这样的电子邮件地址。我该如何解决这个问题? 感谢

3 个答案:

答案 0 :(得分:0)

这个正则表达式使用正面的lookbehind来断言电子邮件应该以用户开头:

(?<=\n.*user[^@]@.*)"type":"none"

并将其替换为

"type":"abc"

您使用的正则表达式/程序语言是什么?

答案 1 :(得分:0)

你想要捕捉“没有”之前的内容。并在替换中使用此捕获,如此

response = prev.getResponseDataAsString();
response = response.replaceAll("(\"email\":\"user.+@email.com\",\"role\":\"user\"},\"type\":\")none\"","$1$abc\"");

答案 2 :(得分:0)

尝试下面的一个

response = prev.getResponseDataAsString(); response = response.replaceAll("\"email\":\"user(\\d+)@email.com\",\"role\":\"user\"},\"type\":\"none\"}","\"email\":\"user$1@email.com\",\"role\":\"user\"},\"type\":\"abc\"}");