详解JMeter正则表达式
详解JMeter正则表达式(1)
1.概览
JMeter中包含范本匹配软件Apache Jakarta ORO 。在Jakarta网站上有一些关于它的文档,例如a summary of the pattern matching characters :
http://jakarta.apache.org/oro/api/org/apache/oro/text/regex/package-summary.html。
另外,还有关于该软件老版本的文档OROMatcher User's guide ,也许会有一些帮助。URL地址:http://www.savarese.org/oro/docs/OROMatcher/index.html。
JMeter的范本匹配与Perl语言的范本匹配类似。一个安装完整的Perl会包含很多关于正则表达式的文档(搜寻perlrequick、perlretut、perlre、perlreref)。
我们有必要分清楚包含(Contains)和匹配(Matches)的差异,它们用于响应断言测试元件:
包含(Contains)意味着正则表达式至少部分匹配目标,例如,'alphabet' 包含 'ph.b.',因为正则表达式匹配其子字符串'phabe'。
匹配(Matches)意味着正则表达式完全匹配目标。例如,'alphabet'匹配'al.*t'。
在这一情况下,它等同于使用^ 和$封装正则表达式,即'^al.*t$'。但是事情并不总是这样。例如,正则表达式'alp|.lp.*'包含于'alphabet',但并不匹配'alphabet'。
原因在于当范本匹配器在'alphabet'中找到序列'alp'后,就会停止尝试其他组合,而且'alp'不同于'alphabet',它不包含'habet'。
不同于Perl,没必要将正则表达式用//封装。
2.实例
1)提取单个字符串
假设测试人员期望匹配Web页面的如下部分:name="file" value="readme.txt">并提取readme.txt。
一个符合要求的正则表达式:
- name="file" value="(.+?)"> 。
上面用到的特殊字符包括如下几个。
( 和 ):封装了待返回的匹配字符串。
.:匹配任何字符。
+:一次或多次。
?:不要太贪婪,在找到第一个匹配项后停止。
如果没有?,在找到第一个">后,会继续寻找,直到最后一个">,这么做很可能不是测试人员期望的。
尽管上面的表达式可以达到目的,但是使用如下表达式更有效率:name="file" value="([^"]+)">,其中[^"]-意味着匹配任何东西(除了")。在这种情况下,匹配引擎在找到第一个右侧"后,就会停止搜索。而 上面例子中的匹配引擎会去寻找">。
2)提取多个字符串
假设测试人员期望匹配Web页面的如下部分:name="file" value="readme.txt">,并提取file.name和readme.txt。
一个符合要求的正则表达式:
- name="([^"]+)" value="([^"]+)"
这会创建两个组合,并可用于JMeter正则表达式模板,形如$1$ 和$2$。
JMeter正则表达式提取器会将组合的值放在指定变量中。
详解JMeter正则表达式(2)
例如,
引用名称:MYREF。
正则表达式:name="(.+?)" value="(.+?)"。
模板:$1$$2$。
不要用/ /封装正则表达式。
如下变量的值将会被设定。
MYREF: file.namereadme.txt。
MYREF_g0: name="file.name" value="readme.txt"。
MYREF_g1: file.name。
MYREF_g2: readme.txt。
这些变量后续可以在JMeter测试计划中引用,形如${MYREF}、${MYREF_g1}等。
3.关键字
正则表达式使用特定字符作为关键字,这些字符对正则表达式引擎有特殊意义。在字符串中使用这些字符必须进行转义(使用反斜杠"\"),目的是将它们当成原始字符,而非正则表达式的关键字。下面是关键字和它们的含义。
( ):组合。
[ ]:字符集合。
{ }:重复。
+ ?:重复。
.:任意匹配字符。
\:转义字符。
| -:选择符。
^ $:字符串或行的起始和结尾。
注意,ORO不支持\Q和\E关键字。
4.修改器(Modifier)
理论上修改器可以被放置在正则表达式的任何地方,并被放置的位置开始向后生效。(ORO存在一个BUG,修改器不能放在正则表达式的末尾。尽管修改器在这里不生效)。
单行(?s)和多行(?m)修改器通常都被放在正则表达式的开头。
忽略(?i)修改器可以被用来仅仅影响正则表达式的某一部分,例如:
- Match ExAct case or (?i)ArBiTrARY(?-i) case
由于单行和多行修改器的设置不同,范本匹配的表现也略有不同。请注意,单行和多行操作符之间没有任何关联;它们可以被单独指定。
1)单行模式
单行模式只影响关键字符"."。默认情况下,"."可以匹配任何字符(除了换行)。在单行模式下,"."还匹配换行。
2)多行模式
多行模式只影响关键字符"^"和"$"。默认情况下,"^"和"$"仅仅匹配字符串的开始和结尾。而在多行模式下,"^"和"$"匹配每一行的开始和结尾。
详解JMeter正则表达式的更多相关文章
- 转:详解JMeter正则表达式(1)
1.概览 JMeter中包含范本匹配软件Apache Jakarta ORO .在Jakarta网站上有一些关于它的文档,例如a summary of the pattern matching cha ...
- 转:详解JMeter正则表达式(2)
例如, 引用名称:MYREF. 正则表达式:name="(.+?)" value="(.+?)". 模板:$1$$2$. 不要用/ /封装正则表达式. 如下变量 ...
- 详解JMeter函数和变量(转载)
详解JMeter函数和变量(1) JMeter函数可以被认为是某种特殊的变量,它们可以被采样器或者其他测试元件所引用.函数调用的语法如下: ${__functionName(var1,var2,var ...
- Java 正则表达式详解_正则表达式
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- 详解 Python3 正则表达式(五)
上一篇:详解 Python3 正则表达式(四) 本文翻译自:https://docs.python.org/3.4/howto/regex.html 博主对此做了一些注明和修改 ^_^ 非捕获组和命名 ...
- 详解 Python3 正则表达式(四)
上一篇:详解 Python3 正则表达式(三) 本文翻译自:https://docs.python.org/3.4/howto/regex.html 博主对此做了一些注明和修改 ^_^ 更多强大的功能 ...
- 详解 Python3 正则表达式(三)
上一篇:详解 Python3 正则表达式(二) 本文翻译自:https://docs.python.org/3.4/howto/regex.html 博主对此做了一些批注和修改 ^_^ 模块级别的函数 ...
- 详解 Python3 正则表达式(二)
上一篇:详解 Python3 正则表达式(一) 本文翻译自:https://docs.python.org/3.4/howto/regex.html 博主对此做了一些批注和修改 ^_^ 使用正则表达式 ...
- 详解 Python3 正则表达式(一)
本文翻译自:https://docs.python.org/3.4/howto/regex.html 博主对此做了一些批注和修改 ^_^ 正则表达式介绍 正则表达式(Regular expressio ...
随机推荐
- float属性详解
内容: 1.block与inline复习 2.float介绍 3.float作用 4.清除浮动 1.block与inline复习 1 block元素是独立的一块,独占一行 2 多个block元素会各自 ...
- position属性详解
内容: 1.position属性介绍 2.position属性分类 3.relative相对定位 4.absolute绝对定位 5.relative和absolute联合使用进行定位 6.fixed固 ...
- 0_Simple__simplePrintf
在设备代码中使用函数 printf(),没有新的认识. ▶ 源代码 #include <stdio.h> #include <cuda_runtime.h> #include ...
- packert tracer配置路由器
配置路由器snmp: https://wenku.baidu.com/view/e73c343f0b4c2e3f57276329.html
- Apache Maven 入门篇
2017-11-09注释:IntelliJ IDEA 2017.2.5 x64 等新版本会安装maven,为了有好的体验 建议在安装目录找到IntelliJ IDEA 2017.2.5\plugins ...
- openlayers3教材详解及demo(完整)
openlayers3教材详解及demo(完整) OpenLayers 3对OpenLayers网络地图库进行了根本的重新设计.版本2虽然被广泛使用,但从JavaScri ...
- 我对if(!this.IsPostBack)的理解
if(!this.IsPostBack) { } 通常用在page_load中,获取一个值,该值指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问,如果是为响应客户端回发而加载该页,则 ...
- Windows下MySQL5.6查找my.ini配置文件
在DOS命令行窗口登录MySQL,输入如下命令查看MySQL的安装目录和数据存放目录,MySQL的配置文件就在数据存放目录下: 另外一种方法: 在"开始 → 所有程序 → MySQL&quo ...
- J2SE 8的输入输出--缓冲
FileChannel带缓冲 //1. read the point location FileChannel channelRead = FileChannel.open(Paths.get(&qu ...
- Java 8 日期时间API
Java 8一个新增的重要特性就是引入了新的时间和日期API,它们被包含在java.time包中.借助新的时间和日期API可以以更简洁的方法处理时间和日期; 在介绍本篇文章内容之前,我们先来讨论Jav ...