如何使正则表达式对于多个值唯一

时间:2018-08-28 13:22:11

标签: regex jmeter

我的回复在2个地方具有相同的值

public boolean isEmpty() {
    // Gets validator instance from factory
    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    validator = factory.getValidator();    

    // Validates 'this' using only fields belonging to the MyCustomIsEmpty group
    Set<ConstraintViolation<MyClass>> constraintViolations = validator.validate(this, MyCustomIsEmpty.class);

    // there are lots of fancy things you could do but this covers your case 
    return constraintViolations.isEmpty();
}

在这种情况下,我只需要捕获一次123456和784217。

我使用正则表达式作为http://images.123456_120*75 http://images.123456_120*75 http://images.784217_120*75 http://images.784217_120*75 来提取所有4个值。但是我担心的是,我需要每个2个值中的一个。你能帮我吗 在此先感谢?

4 个答案:

答案 0 :(得分:0)

一种方法是让 2个后处理器具有相同的正则表达式。现在,在 1st 常规提取器中,将 Match No:值用作 1 ,在 2nd 中,使用 Match否:值为 4

enter image description here

希望这会有所帮助。

答案 1 :(得分:0)

使用正则表达式执行此操作非常棘手,我建议改为使用JSR223 PostProcessorGroovy language

  1. 将JSR223 PostProcessor添加为请求的子代,该请求返回上面的图像URL。
  2. 将以下代码放入“脚本”区域

    (prev.getResponseDataAsString() =~ "http://images.(\\d+)_120\\*75").findAll().unique().eachWithIndex {match, idx ->
        vars.put('image_' + idx,match.get(1))
    }
    
  3. 如果一切顺利,您应该看到生成了以下JMeter Variables

    image_0=123456
    image_1=784217
    etc.
    

答案 2 :(得分:0)

这应该起作用,它只捕获一次唯一值:

(\d+)(?:_)(?![\s\S]*\1)

Try Demo here

说明

(\d+)(?:_)(?![\s\S]*\1)

第一个捕获组 (\d+)

\d+匹配一个数字(等于[0-9]

  • 数量词-匹配一次和无限次,尽可能多的次数,并根据需要返回(贪婪)

非捕获组 (?:_)

_从字面上匹配字符_(区分大小写)

负前瞻 (?![\s\S]*\1)

声明以下正则表达式不匹配 匹配[\s\S]*

下列表中存在的单个字符
  • 数量词-尽可能在零到无限次之间进行匹配,并根据需要返回(贪婪)

\s匹配任何空白字符(等于[\r\n\t\f\v ]

\S匹配任何非空白字符(等于[^\r\n\t\f\v ]

\1与第一个捕获组最近匹配的文本匹配

答案 3 :(得分:0)

也许您可以在一个组中捕获整个比赛,并在第二个组中捕获数字。然后,使用否定的前瞻方式断言在第1组中捕获的内容不再发生,从而为您提供了唯一的值。

您要匹配的数字在捕获组2中。请注意,要从字面上匹配点class Appointments : AppCompatActivity() { lateinit var tv:TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_appointments) tv = findViewById(R.id.textView4) tv.setOnClickListener(View.OnClickListener { var callIntent = Intent(Intent.ACTION_EDIT) .setType("vnd.android.cursor.item/event") startActivityForResult(callIntent, 3); }) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if(requestCode == 3 && resultCode == Activity.RESULT_OK && data!=null){ Toast.makeText(this@Appointments,"Some data came",Toast.LENGTH_SHORT).show() } else{ Toast.makeText(this@Appointments,"Some Error",Toast.LENGTH_SHORT).show() } } } 和星号.,您必须对其进行转义。

*

Regex demo