![b33a1a49b3ce918867ae02b218cb620d.png](https://i-blog.csdnimg.cn/blog_migrate/2e67c7834298aacf7f809371d6a9abe7.jpeg)
前沿
JMeter正则表达式提取器的配置项中, Regular Expression
, Template
与 Match No.
这三个配置项是比较难以理解的,本文针对这三个配置项设置进行深入分析,以便大家能够游刃有余的使用其功能.
1 JMeter使用的正则表达式
JMeter包含模式匹配工具Apache Jakarta ORO
,对应的jar包在JMeter安装目录下的liboro-2.0.8.jar
.
Jakarta
项目是在Apache软件基金会营运的开放源代码开发项目之一.开发着面向对象编程语言Java的程序库,框架等.其中的ORO
是一组用于处理文本的Java类库,提供了与Perl5
兼容的正则表达式功能.
2 正则表达式提取器中的Regular Expression
该配置项填写提取响应数据的正则表达式.
JMeter匹配文本时可以选择不分组捕获与分组捕获两种方式.
2.1 不分组捕获
当Template
配置相中填写的是$0$
时, Regular Expression
配置项中可以没有()
,表示不分组,返回整个匹配项.
如图所示:
![1ae743ca0ad2c71156f3b072e7fcf86d.png](https://i-blog.csdnimg.cn/blog_migrate/f1986dfc23bc7c2f6e45bc68fd6e64d4.jpeg)
2.2 分组捕获
当使用分组捕获时,Regular Expression
配置项中则必须至少包含一组(),用以捕获一个或多个字符串.
一组()
称为一个捕获组
,并且捕获组可以嵌套.
每个捕获组都有一个编号与之对应,以方便引用捕获组匹配的内容.若有多个捕获组,编号规则为:
按照"("从左至右出现的先后顺序,从1开始依次递增进行编号: 1,2,3, ... ,n
还有一个额外编号为0的捕获组,用于表示匹配到的整个正则表达式字符串.
比如:
正则表达式: ((d{4})-(d{2})-(d{2}))s((d{2}):(d{2}):(d{2}))
捕获组编号: 1 2 3 4 5 6 7 8
响应文本: Today is 2019-06-25 14:29:30,Tuesday
匹配后各捕获组对应的内容如下:
g1:2019-06-25
g2:2019
g3:06
g4:25
g5:14:29:30
g6:14
g7:29
g8:30
g0:2019-06-25 14:29:30
![e6f2d3815f810c5645507d62d09e076c.png](https://i-blog.csdnimg.cn/blog_migrate/e74b88e07aced66454f94f8eca24afbf.jpeg)
3 正则表达式提取器中的Template
Template
用以设置捕获到的字符串以怎样的格式保存到JMeter变量中.
可以原样保存,也可以格式化保存,下面讨论这两种情况.
3.1 原样保存捕获组字符串
在此项中,可以用$1$
表示引用捕获组1中的内容,$2$
表示引用捕获组2中的内容, ... ,$n$
表示引用捕获组n中的内容,$0$
表示引用正则表达式匹配后的整个字符串.
![4c832e2fbd3b25f1038c73f185f7ff4b.png](https://i-blog.csdnimg.cn/blog_migrate/604eb050771089f731bca7d8cbce84d2.jpeg)
3.2 格式化保存捕获组字符串
除了使用$n$
引用捕获组的内容外,还可以加入需要的字符,将匹配的内容按照某种格式保存.
![3b811306c73850a60d2e861f2186e3b3.png](https://i-blog.csdnimg.cn/blog_migrate/0cbb858d92641a9c7da188b17aae69b0.jpeg)
4 正则表达式提取器中的Match No.
当正则表达式的捕获组匹配到多个满足条件的字符串时,会按照捕获的先后顺序依次对其进行编号:1,2,3,...,n
可以使用编号来选择需要的字符串,1表示第一个匹配的字符串,2表示第二个匹配的字符串,...,依次类推.
可以根据实际需要从中选择某个匹配项,所有匹配项或随机选择某个匹配项.
4.1 选择某个匹配项
设置Match No.
为i(i=1,2,3,...,n)
,i不能超过匹配的最大次数.
比如,设置为2,表示取捕获组获取的第二个匹配项.
![98e797a9dee94be8be266e73ed910aee.png](https://i-blog.csdnimg.cn/blog_migrate/8975e58dffac6f1a2102049ef2b3bd5d.png)
为了方便引用捕获的内容,JMeter提供了丰富的变量,可以根据实际情况选择所需的变量.
假设:
"Name of created variable"设置为refName
"Match No."设置为i
捕获组的个数为m
各变量的具体含义如下:
refName: 按照"Template"设置保存的模板值;
refName_g: 捕获组的个数
refName_g0: 正则表达式的值
refName_gN: 捕获组N的第i个匹配项(N=1,2,3,...,m)
举例说明:
![e06fca166f3749b1bad721342c9e55ba.png](https://i-blog.csdnimg.cn/blog_migrate/760f066c0e7ae9d8a19778df41ebc7ed.png)
4.2 选择所有匹配项
设置Match No.
为-I(I=1,2,3,...)
.
JMeter只要检测到是负整数时则输出所有匹配项.
![d70fff7e123e2e290843d2ff760e12e1.png](https://i-blog.csdnimg.cn/blog_migrate/310f47c96d156ebc6f7e3533de3ea700.png)
假设:
"Name of created variable"设置为refName
"Match No."设置为-I
捕获组的个数为m
捕获组匹配项的个数为n
各变量的具体含义如下:
refName: 在此种情况下始终显示为默认值(Default Value设置的值)
refName_i: 捕获组第i个匹配项对应的模板值(i=1,2,3,...,n)
refName_i_g: 捕获组第i个匹配项个数(i=1,2,3,...,n)
refName_i_g0: 捕获组取第i个匹配项时正则表达式的值(i=1,2,3,...,n)
refName_i_gj: 捕获组j(j=1,2,3,...,m)的第i(i=1,2,3,...,n)个匹配项
下面是一个例子:
![379224bb1899471bdcc9ba9410c23a11.png](https://i-blog.csdnimg.cn/blog_migrate/ef8764b26ec69506ace9088db27bb3d3.jpeg)
4.3 随机选择某个匹配项
设置Match No.
为0
![ea2b1a66b374c45c37dd77b36cb8c932.png](https://i-blog.csdnimg.cn/blog_migrate/3e0396901cd4e027e9acb179ac8b8a59.png)
此种情况下,各变量的具体含义与"4.1 选择某个匹配项"相同,不再说明.