好久不见的每周学点测试小知识,在上周的课堂上芒果给大家介绍了正则表达式,在这里我们简单的复习一下,认识一下正则表达式,并且学习一些常用的元字符:
正则表达式简介
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
通过正则表达式,我们可以测试字符串内的模式;替换文本;基于模式匹配从字符串中提取子字符串;可以查找文档内或输入域内特定的文本。在测试工作上的运用,比如postman 正则提取,jmeter 正则提取,fiddler 正则搜索,fiddler url过滤,fiddler autoresponder 正则url匹配,fiddler 脚本中正则匹配替换,日志查询等等都是需要用到正则表达式的。
简单匹配
a 单纯字符,就是匹配相同的字符,也可以多个;
[] 包含,只要写在中括号内的都可以匹配,也可以范围模式,如[0-9]可以匹配0-9的任意数字,[abc]可以匹配abc任意字符;
[^] 排除,没写在括号中内容都可以匹配,也可范围排除,如[^0-9]可以匹配0-9外的任意字符;
{} 数量匹配,表示前面的内容出现多少次,如a{2}可以匹配aa,a{1,3}表示可以匹配a1至3次,即a,aa,aaa,a{1,}则可以匹配a一次到∞次,即a,aa,aaa,...;
f 匹配一个换页符;
n 匹配一个换行符;
r 匹配一个回车符;
t 匹配一个制表符;
v 匹配一个垂直制表符;
s 匹配任何空白字符,包括空格、制表符、换页符等等,等价于 [ fnrtv];
S 匹配任何非空白字符,等价于 [^ fnrtv]。
通配符
转义符,比如通配符本身^是个被查找的字符则需要 ^;
. 点,任意字符内容的匹配,除了换行符;
? 非贪婪字符,等价于匹配长度0或1 ,等价于{0,1};
贪婪字符,等价于匹配长度大于0 ,等价于{1,};
* 贪婪字符,等价于匹配长度大于等于0 ,等价于{0,};
d 表示任意数字,等价于[0-9]
w 表示任意大小写字母、数字或者下划线,等价于[A-Za-z_0-9]
u u后面跟4个16进制数字,一般用于中文匹配,如[u4e00-u9fa5]可以匹配对应的中文。
逻辑格式
() 匹配括号里的表达式并获取这一匹配;和数学、代码优先级一样,都是类似内部需要优先计算,括号可以提高优先级;如果只想匹配而不获取括号内的表达式,可以加上字符?:;
| 或逻辑,和代码中相同,表示前面和后面的表达式都可以算匹配;
^ 开始符号,只用在开头,表示一定要从开头匹配,中间开始的不算;
$ 结束符号,只用在结尾,表示一定是末尾匹配,前面的都不算;
^和$ 一起用时,代表前后都要匹配,只有整个字符串符合才算匹配;
b 用来描述字符串或单词的边界,描述单词的前或后边界;
B 表示非单词边界;不能对定位符使用限定符。
几个小例子
我们在做正则匹配、提取或者是替换操作时,一般会将这些字符结合起来使用,接下来,我们一起看几个简单的小例子吧:
l 匹配字符串asd123asd中的数值:
我们想要对数字进行匹配一般可以使用[0-9]或者是d,加上数字又有多个,所以我们可以使用[0-9] 或者是d 进行匹配。
l 匹配字符串u628ATESTu7F16中的编码中文内容:
从上面学习中我们可知道中文字符为u后面接上4个16进制数字,所以在此字符串中我们可以使用\uw{4}进行匹配,u为元字符需要进行转义,而16进制数字我们可以用w([A-Za-z_0-9])进行匹配,如果需要更精确一点我们可以使用\u[0-9A-Z]{4}进行匹配。
l 获取json字符串{str:"value",int:123}中str对应的值的value:
从字符串分析我们可以知道value是位于str:”与”,之间的字符串,字符个数未知,所以我们可以使用{str:”(. ?)”,进行匹配,并使用()括号来获取其中的值。
l 匹配只要13、14、15、16、17、18打头的11位手机号码:
被匹配的字符串个数必须是11位,并且第一位数字肯定为1,第二位数字位3、4、5、6、7、8,后面接上9位数字,因此匹配表达式可以为^1[3-8][0-9]{9}$。