前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一起来了解一下正则表达式

一起来了解一下正则表达式

作者头像
软测小生
发布2019-07-24 15:49:09
6180
发布2019-07-24 15:49:09
举报
文章被收录于专栏:软测小生软测小生软测小生

一、 什么是正则表达式:

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

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

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

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

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

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

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

待查找序列

例句

匹配结果

Green

The Greens have Mr. Green, Mrs. Green and Tom Green.

The Greens have Mr. Green, Mrs. Greenand Tom Green.

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

待查找序列

例句

匹配结果

\bGreen\b

The Greens have Mr. Green, Mrs. Green and Tom Green.

The Greens have Mr. Green, Mrs. Greenand Tom Green.

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

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

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

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

待查找序列

例句

匹配结果

T\w{2}

The Greens have Mr. Green, Mrs. Green and Tom Green.

The Greens have Mr. Green, Mrs.Green and Tom Green.

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

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

待查找序列

例句

匹配结果

T\w{2,3}

The Greens have Mr. Green, Mrs. Green and Tony Green.

The Greens have Mr. Green, Mrs.Green and Tony Green.

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

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

待查找序列

例句

匹配结果

T[a-z]{2,3}

The Greens have Mr. Green, Mrs. Green and Tony Green.

The Greens have Mr. Green, Mrs.Green and Tony Green.

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

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

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

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

然后替换——>全部替换

更多的正则表达式:

正则表达式验证6到10个字符串或数字的长度:^[a-zA-Z0-9]{6,10}$
验证数字的正则表达式
验证数字:^[0-9]*$
验证n位的数字:^\d{n}$
验证至少n位数字:^\d{n,}$
验证m-n位的数字:^\d{m,n}$
验证零和非零开头的数字:^(0|[1-9][0-9]*)$
验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
验证非零的正整数:^\+?[1-9][0-9]*$
验证非零的负整数:^\-[1-9][0-9]*$
验证非负整数(正整数 + 0) ^\d+$
验证非正整数(负整数 + 0) ^((-\d+)|(0+))$
验证长度为3的字符:^.{3}$
验证由26个英文字母组成的字符串:^[A-Za-z]+$
验证由26个大写英文字母组成的字符串:^[A-Z]+$
验证由26个小写英文字母组成的字符串:^[a-z]+$
验证由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
验证由数字、26个英文字母或者下划线组成的字符串:^\w+$
验证用户密码:^[a-zA-Z]\w{5,17}$ 正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
验证是否含有 ^%&',;=?$\" 等字符:[^%&',;=?$\x22]+
验证汉字:^[\u4e00-\u9fa5],{0,}$
验证Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$
验证电话号码:^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$:--正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。
验证身份证号(15位或18位数字):^\d{15}|\d{}18$
验证一年的12个月:^(0?[1-9]|1[0-2])$ 正确格式为:“01”-“09”和“1”“12”
验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$ 正确格式为:01、09和1、31。
整数:^-?\d+$
非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$
正浮点数 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
非正浮点数(负浮点数 + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
负浮点数 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
浮点数 ^(-?\d+)(\.\d+)?$
23:40 CST(美国UTC时间验证) ((([1-9]{1})|([0-1][0-9])|([1-2][0-3])):([0-5][0-9]) CST)

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})[-|/](((0[13578]|1[02])[-|/](0[1-9]|[12][0-9]|3[01]))|((0[469]|11)[-|/](0[1-9]|[12][0-9]|30))|(02[-|/](0[1-9]|[1][0-9]|2[0-8])))

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

(((0[1-9]|[12][0-9]|3[01])[-|/](0[13578]|1[02]))|((0[1-9]|[12][0-9]|30)[-|/](0[469]|11))|((0[1-9]|[1][0-9]|2[0-8])[-|/]02))[-|/]([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(英语月份)

(((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

万水千山总是情,点个“在看” 行不行!!!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软测小生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档