Jmeter中的正则表达式

本文介绍了正则表达式的常用字符和操作,如`^`、`$`、`w`、`s`、`.`等,并通过实例解释了量词如`*`、`+`、`?`和范围限定符`{n,m}

正则表达式:描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
对于正则表达式,相信很多人都知道或者听说过,但是很多人的第一感觉就是难学,因为看第一眼时,全是一堆各种各样的特殊符号,完全不知所云。
其实只是对正则不了解而以,了解了你就会发现,原来就这样啊。正则所用的相关字符其实不多,也不难记,更不难懂,唯一难的就是组合起来之后,可读性比较差,而且不容易理解。

本文旨在让大家对正则有一个基本的了解,能写得出简单的正则表达式,并在Jmeter中应用,以满足日常测试或性能测试中的需求。

1、必须掌握的正则字符

先简要看下,最常用的字符含义。

"^" :^会匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置。

"$"  :$会匹配行或字符串的结尾。

"\w":匹配字母,数字,下划线。

例如我要匹配"a2345BCD__TTz" 正则:"\w+"  这里的"+"字符为一个量词指重复的次数。 

"\s":匹配空格。

例如字符 "a b c" 正则:"\w\s\w\s\w"  一个字符后跟一个空格,如有字符间有多个空格直接把"\s" 写成 "\s+" 让空格重复。 

".":匹配除了换行符以外的任何字符。

"[abc]": 字符组,匹配包含括号内元素的字符。

"*":   重复零次或更多(贪婪模式)。

例如"aaaaaaaa" 匹配字符串中所有的a  正则:"a*" 会出到所有的字符"a"。

"+":   重复一次或更多次(懒惰模式)。

例如"aaaaaaaa" 匹配字符串中所有的a;  正则:"a+"会取到字符中所有的a字符,"a+"与"a*"不同在于"+"至少是一次而"*" 可以是0次。

"?":   重复零次或一次。

例如"aaaaaaaa" 匹配字符串中的a 正则 : "a?" 只会匹配一次,也就是结果只是单个字符a。

"{n}":  重复n次。

例如从"aaaaaaaa" 匹配字符串的a 并重复3次 正则:"a{3}" 结果就是取到3个a字符 "aaa"。

"{n,m}":  重复n到m次。

例如正则 "a{3,4}" 将a重复匹配3次或者4次;所以供匹配的字符可以是三个"aaa"也可以是四个"aaaa"正则都可以匹配到。

"{n,}":  重复n次或更多次。

与{n,m}不同之处就在于匹配的次数将没有上限,但至少要重复n次 如 正则"a{3,}" a至少要重复3次。

"*?":   重复任意次,但尽可能少重复。

如 "acbacb" 正则"a.*?b" 只会取到第一个"acb" 原本可以全部取到但加了限定符后,只会匹配尽可能少的字符 ,而"acbacb"最少字符的结果就是"acb"。

"+?":  重复1次或更多次,但尽可能少重复。

与上面一样,只是至少要重复1次。

"??":  重复0次或1次,但尽可能少重复。

如 "aaacb" 正则 "a.??b"只会取到最后的三个字符"acb"。

"{n,m}?":  重复n到m次,但尽可能少重复。

如 "aaaaaaaa"  正则 "a{0,m}" 因为最少是0次所以取到结果为空

 说明:

  (1)引用名称:下一个请求要引用的参数名称,如填写title,则可用${title}引用它。

  (2)正则表达式:

    ():括起来的部分就是要提取的。

    .:匹配任何字符串。

    +:一次或多次。

    ?:不要太贪婪,在找到第一个匹配项后停止。

  (3)模板:$1$表示解析到的第1个值

  (4)匹配数字:0代表随机取值,1代表全部取值,通常情况下填0

  (5)缺省值:如果参数没有取得到值,那默认给一个值让它取。

<think> 我们正在讨论JMeter中的正则表达式提取器。根据用户的问题,用户想了解JMeter正则表达式的使用、示例及相关知识。 根据引用[1]中的内容,我们得知: - 在需要取正则表达式提取器取到的值的地方,使用`${name}`替换(其中`name`代表key)。 - 示例中key为`userSession`,所以使用`${userSession}`。 因此,我们可以在回答中引用这个例子,并详细说明正则表达式提取器的使用步骤。 回答结构: 1. 正则表达式提取器的作用 2. 使用步骤(包括如何配置) 3. 示例 4. 注意事项 同时,我们需要生成相关问题。 注意:用户提到“引用[1]”是站内引用,并且在回答中引用的段落末尾添加引用标识[^1],但这里我们注意到引用[1]的内容已经被用户给出,所以我们可以直接使用。 由于引用[1]的内容已经给出,我们将它作为参考,并整合到回答中。 另外,注意用户要求使用中文回答,并且数学表达式使用指定格式(但本问题中可能用不到行内数学表达式,如果有变量之类的,我们可以用$...$,例如变量名等可以不用,主要是配置项的名称可能需要强调)。 开始回答: </think> ### JMeter正则表达式的使用指南 在JMeter中,正则表达式提取器(Regular Expression Extractor)用于从服务器响应中动态提取数据,实现参数化请求关联测试。以下是核心知识点: #### 一、使用步骤 1. **添加提取器** 在HTTP请求采样器的子级添加 → 后置处理器 → 正则表达式提取器。 2. **配置参数** - `引用名称`:存储提取值的变量名(如 `userSession`) - `正则表达式`:匹配响应数据的表达式(如 `"token":"(.+?)"`) - `模板`:用 `$1$` 表示捕获的第一个组(多组时用 `$1$` `$2$`) - `匹配数字`:`0`随机,`1`第一个匹配,`-1`所有匹配 3. **调用变量** 在后续请求中用 `${变量名}` 引用值,如 `${userSession}`[^1] #### 二、常用正则语法 | 表达式 | 说明 | JMeter示例 | |----------|-----------------------|------------------------| | `(.+?)` | 非贪婪匹配任意字符 | `"id":"(.+?)"` | | `\d+` | 匹配数字 | `orderNo=(\d+)` | | `.*?` | 最小匹配任意字符 | `<input value="(.*?)">`| | `(\w+)` | 匹配字母/数字/下划线 | `user=(\w+)` | #### 三、实操示例 **场景**:从登录响应中提取会话ID ```plaintext HTTP响应:{"status":200, "session":"A1B2C3D4E5"} ``` 1. 正则表达式提取器配置: - 引用名称: `authToken` - 正则表达式: `"session":"(.+?)"` - 模板: `$1$` 2. 在后续请求头中使用: ```plaintext Authorization: Bearer ${authToken} ``` #### 四、注意事项 1. **性能影响**:复杂正则可能导致性能下降,优先用简单表达式 2. **特殊字符转义**:如 `()` `[]` 需用 `\` 转义(例:`\(`) 3. **调试技巧**:使用`Debug PostProcessor`查看提取结果 4. **多值处理**:`匹配数字=-1`时,通过 `${var_1}`,`${var_2}` 访问 > ⚠️ 表达式需与响应数据格式严格匹配,建议先用 **View Results Tree** 的 `RegExp Tester` 验证[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值