软件测试常用的命令软件测试职业探索

正则表达式

2019-07-24  本文已影响13人  软测小生

本文首发于微信公众号: 【软测小生】
一、 什么是正则表达式:

在维基百科中,正则表达式被形容是“使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。”

二、 为什么使用正则表达式:

在接触到这一概念时,我们可能会觉得它神秘莫测,同时又比较难以理解。首先我们了解了正则表达式(下文简称为正则)是一个字符串,它由一系列我们常用或常见的文字、符号等组合而成,在我们需要检索特定文本时,通过使用正则,往往能够提升效率,避免做出大量重复检查、匹配的劳动。

三、 如何使用正则表达式:

接下来,我们完全可以将正则理解为一门语言,它有属于自己的字符、字符含义、字符组合等,我们可以通过一些实例来具体看一下,究竟什么情况下,这门“神奇”的语言能够帮到我们。

1. 我想找一个已经明确的对象

这个时候我们可以直接写出要找的字符,比如我要找Green; image.png

2. 如果我需要查找Green这个单词,请注意,这和前面的匹配条件是有细微差别的

image.png

这里的\b标记单词的边界(实际上是一个位置),在进行主观判断时,建议你通过以下条件查看一个序列是否匹配——

(1) \b本身是不具有长度的,所到达的这个位置是单词边界,就算是匹配成功;

(2) \b的一侧是构成单词的字符,另一侧不能是英文字母、数字、下划线,所以Greens右侧出现了s,就不符合筛选条件了;

3. 现在我们需要查找一个T后面跟随2位长度字符的序列

image.png

在这里,The和Tom我们都找到了,其实\w代表任意一个字母、数字或者下划线,而{2}表示将前面的一个单元重复2次,也就是说T1a,T23,T4_,T_6,T__,都是可以通过这个正则筛选出来的,Tony当中的Ton也符合这个正则;

4. 通过修改上面这条正则,我们也可以直接筛选到Tony

image.png

变化就在{2,3}当中,这里{2,3}表示将前面的一个单元重复最少2次,最多3次,如果你还想筛选Tommy,可以继续修改这个正则为T\w{2,4}

5. 你可能已经发现,在使用\w时,我们不能只筛选英文字母或者说准确到只筛选小写英文字母

image.png

[a-z]表示从小写字母a到小写字母z这个范围,匹配到任意一个字母就算成功,那么我们使用上面这条正则,就可以筛选到The,Tom,Tony,类似,如果需要筛选大写字母序列,可以使用[A-Z],比如TOM,TONY,就可以使用T[A-Z]{2,3}筛选出来。

四、 在哪里使用正则表达式:

首先,多数的编程语言都能够支持正则,比如python,Java等;

平常在使用Fiddler、Charles等代理工具时,我们也可以通过正则来简化重定向,比如[t|T]1.abc.com可以定位到t1.abc.com或T1.abc.com,其中|表示或。

现在简单总结一下,我们可以通过使用正则来识别全部符合要求的文本,同时,也忽略掉那些不符合要求的文本。在构建正则时,我们需要使用到基本字符和特殊字符。基本字符主要包括英文字母、数字(准确说应该是十进制数字)、下划线、空格等等,我们可以简单理解为,这些字符在一条正则中,表示的就是它本身的意义,没有发生什么变化。比如我们上面已经应用过的,Green表示的就是大写字母G,小写字母r,e,e,n按照顺序组成的一个序列,而在{2,3}当中,2表示的就是数字2。当然还有一些特殊字符,比如[a-z]中,[]就不是简单的括号,而表示在它当中列举的字符里选择一个,当然-也不仅仅是连字符了,而是代表了一个范围。类似还有像\b\w\n(一个换行符),\s(一个空格),.(除换行符以外的其他任意一个字符),^(一行开始的位置),$(一行结束的位置)。

五、 部分正则表达式实例: 在实际测试中很多都用得到正则表达式,有的时候用好了,事半功倍,甚至好几倍:
比如你得到一个很长的文本文档,你要删除/增加其中一部分重复的内容,一点点手动删除肯定会手抽筋,但是可以写一个正则表达式即可搞定。
实例1

用Notepad++快速替换文本文档中的换行符或者****批量去掉换行符。
首先小编遇到这样的问题,想把下图左边的内容快速转换成为右边的样式使用。

image

巧妙利用 \r\n,并选中 对反斜杠""进行转义,如下:


image

实例2: 批量删除以“#id”开头所有行的内容,删除该文本中所有以"$id": 开头的行,可能有上百行,不能一行行手动删除。

image

解决: 正则表达式: "$id":.*?\r\n 首先查找

image

然后替换——>全部替换

image

更多的正则表达式:

正则表达式验证6到10个字符串或数字的长度:^[a-zA-Z0-9]{6,10}$

YYYY/(-)MM/(-)DD:****(2017-05-31 2017/05/31)

([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-|/

DD/MM/YYYY:(31-05-2017 31/05/2017)

(((0[1-9]|[12][0-9]|3[01])-|/)|((0[1-9]|[12][0-9]|30)-|/)|((0[1-9]|[1][0-9]|2[0-8])[-|/]02))-|/

DD MM,YYYY(英语月份)

(((0[1-9]|[12][0-9]|3[01]) (Jan|Mar|May|(July|Jul)|(August|Aug)|Dec))|((0[1-9]|[12][0-9]|30) (Apr|Jun|(September|Sep)|Nov))|((0[1-9]|[1][0-9]|2[0-8]) Feb))(\, | )([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})"

推荐大家一个比较实用的正则表达式测试网站

https://tool.chinaz.com/regex

在这里可以判断你写的正则表达式是否符合你的预期,对符合筛选条件的字符串标注颜色等。

参考文献:

(1) https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F

(2) 《精通正则表达式》(第3版),电子工业出版社

(3) https://blog.csdn.net/lxcnn/article/details/4355364

上一篇下一篇

猜你喜欢

热点阅读