简体   繁体   中英

How to extract multiple values with a regular expression in Jmeter

I am running tests with jmeter and I need to extract with a Regular Expression:

insertar?sIws2kyXGJJA_01== 
insertar?sIws2kyXGJJA_02==

in the following String:

[\"EMBPAGE1_00010001\",\"**insertar?sIws2kyXGJJA_01==**\",1,100,\"%\",300,\"px\",0,\"center\",\"\",\"[\"EMBPAGE1_00010002\",\"**insertar?sIws2kyXGJJA_02==**\",1,100,\"%\",300,\"px\",0,\"center\",\"\",\"

In answer given by DMC, you need to add regular expression extractor TWICE to match/retrieve both the values with different Match No. (1, 2). Though it is also correct, suggesting better approach to achieve the same.

Another Approach:

1. Capture Both Values:

You can use Template to capture both the values at the same time , and later, refer it using indexing.

Please check the following screen shot:

在此输入图像描述

Here, we captured both the values using two groups into two different templates, as $1$ and $2$ respectively. Here, templates store the data in the order of the groups specified in regular expression by default. (FYI, you can change the order also by tweaking the order of templates like $2$ and then $1$.)

Now, as in the diagram, we are capturing two values and storing them using templates: $1$ (refers to first group match) and $2$ (refers to second group match)

2. Retrieve Values:

Now, refer these values in your script by using the following syntax:

${insert_values_gn} (n refers to match no.)

eg:

${insert_values_g1} - refers to the first match

${insert_values_g2} - refers to the second match

To make it simple, You can think "insert_values" as list of strings captured using multiple groups and use 'n' (1,2,3 etc) as the index to retrieve the values.

Note: using templates, you can have any number of values can be retrieved using multiple groups and refer to them by indexing, using a single regular expression extractor.

I'm sure there is a more efficient way but this worked:

\*\*(.*?)\*\*.*\"\*\*(.*?)\*\*

在此输入图像描述

You can also use only \\*\\*(.*?)\\*\\* It will match both of them anyway, so make sure you set the right 'Matching No.' in Jmeter if you pass one of the values:

在此输入图像描述

The Matching No should be 1 for the first, and 2 for the second match i believe.

Use super secret operator (Negative match N) 在此输入图像描述

UPD: G2 - is in my example, as I extract two groups from each encounter. each encounter is "uuid" in g1 and g2 is second part I need second part here. that's why $2$ template and g2. If your encounters in one group you ll most likely use $1$ template that will place all encounters into g1. If you have one match group you don't actually need _gN ending at all. To understand more the variables after group extraction add a "Debug PostProcessor" and inspect output in TreeView.

It nice two know that control elements like "For each" understand groups and can work with prefix like regexUUID_ and walk through. In most cases it's next you do after extraction.

UPD2. primitive version of regexp in question (insertar\\?sIws2kyXGJJA_\\d*)==([^[]*) with template $1$$2$ you ll have the first parts in g1 group and the second parts in g2

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM