首页 > 编程知识 正文

linux正则表达式例子(email的正则表达式)

时间:2023-05-05 14:22:15 阅读:71738 作者:1938

前言

要使用man grep显示grep帮助文档,请执行以下操作:

图像

正则表达式有3种,分别为

基本正则表达式(基本规则表达式将基本规则表达式也称为BREs )

扩展正则表达式(扩展规则表达式将扩展regex也称为EREs )

Perl正则表达式(Perl Regular ExPREssion将Perl RegEx也称为pres )

由于BREs句法需要大量转义字符,正则表达式很难理解,所以本文使用Perl型正则表达式。

1 .检查MAC地址

我们常见的MAC地有以下两种格式。

48-5D-60-DE-3D-C5

4:5 d 33606033606033606133603 d : c 5

请考虑第一个例子。 也就是说,共有6组十六进制数的中间用短横线“-”连接。 各组十六进制数据的值范围可能由a-f、a-f或0-9两个字符组成。

首先,用正则表达式表示a-f、a-f或0-9这两个字符

[a-fA-F0-9] [a-fA-F0-9]

可知[a-fA-F0-9]重复2次,因此上述公式为

[a-fA-F0-9] {2}

然后,正则表达式表示的六对a-f、a-f或0-9两个字符之间用短横线连接。

[ a-fa-F0-9 ] {2}-[ a-fa-F0-9 ] {2}-[ a-fa-F0-9 ] {3}-[ a-fa-F0-9 ]

上述正则表达式太肥大了,所以两组其实我们都能看到

在重复[a-fA-F0-9]{2}-次后,最后添加了一组[a-fA-F0-9]{2},其中0-9可用d代替。 基于这种想法,修改上述正则表达式如下。

[ a-fa-fd ] {2}-} {3} {4} [ a-fa-fd ] {5} {6}2}

最后,验证上述正则表达式是否满足要求。 创建mac.txt。 内容如下。

48-5D-60-61-3D-C5

08-D4-hM-1D-AD-AE

28-D2-44-B7-AD-EC

XX-5D-60-61-3D-C5

其中第2行和第4行是错误的MAC地址,检查结果如下。

图像

从以上结果可以看出,上述正则表达式是正确的。

2 .检查电子邮件地址

下表是常见的邮箱格式:

根据上述常见邮箱格式,可以总结邮箱格式满足的规则

1 )邮箱一定有一个@

2 )邮箱@前缀以数字或字母开头

3 )邮箱@前缀由多个字符、数字、横线-、下划线_、句点自由连接而成

4 )邮箱@后缀由两个或三个级别的域名组成,每个域名之间用句点“.”分隔,每个级别的域名由字母或数字组成

根据以上规则,可以得到以下正则表达式。

1 )邮箱中一定有@。 对应的正则表达式如下。

@

2 )邮箱@前缀以数字或字母开头,对应的正则表达式如下:

^[a-zA-Z0-9]@

其中^表示开始位置,[a-zA-Z0-9]表示数字或字母

3 )邮箱@前缀由多个字符、数字、横线-、下划线_、句点自由连接而成

^[a-zA-Z0-9][a-zA-Z0-9-._] @

这里表示要重复1~多次

4 )邮箱@后缀由两个或三个级别的域名组成,每个域名之间用句点“.”分隔,每个级别的域名由字母或数字组成。

@([a-zA-Z0-9].) { 1,2 } [ a-za-z0-9 ] $

其中,([a-zA-Z0-9] ).),2 )可以划分为:

[a-zA-Z0-9]数字或字母

[a-zA-Z0-9]重复一次以上数字或字母

[a-zA-Z0-9] .重复数字或字母一次以上后画上句点。

([a-zA-Z0-9] ).)、1、2 )重复数字或字母一次以上,然后画上句点。 整体重复1至2次。

最后一个[a-zA-Z0-9]表示以多个数字或字母结尾。

如果将上述邮箱@前缀正则表达式与邮箱@后缀正则表达式组合,则同时0-9的数字可以用d表示,因此可以将内容0-9替换为d。 与最后得到的表达式邮箱匹配的正则表达式如下所示。

^ [ a-za-zd ] [ a-za-zd-. _ ] @ [ a-za-zd ].] { 1,2 } [ a-za-zd ] $

现在,我们来验证一下写的正则表达式。

创建新的mail.txt。 内容如下。

其中,最后三种行为是错误的形式,使用正则表达式进行的

校验:

image

由上述结果可以看出,我们的正则表达式是符合要求的。

3.校验手机号

要校验手机号,我们首先需要知道手机号的组成格式。目前国内的手机号有以下格式:

1)由数字1开头

2)第二位数字的取值范围是3、4、5、7、8、

3)最后为9位数字

根据以上规则,写出对应的正则表达式

由数字1开头

^1

第二位数字的取值范围是3、4、5、7、8、

[34578]

最后为9位数字

[0-9]{9}$

其中[0-9]{9}表示0-9的数字取值重复9次,$表示结尾。由于0-9的数字可以由d表示,上述内容等价于

d{9}$

将上述正则表达式组合在一起,就可以得到我们想要的正则表达式,如下所示:

^1[34578]d{9}$

下面开始进行校验,新建一个phone.txt,内容如下:

138537721989

146398702123

12200993333

23848270281

13849199233

d333300-903

其中只有倒数第二行的号码是正确的,使用正则表达式进行校验:

image

由上述结果可以看出,我们的正则表达式是符合要求的。

4.校验IP地址

对IP地址进行严格校验比较麻烦,首先要确定一个标准可用的IP地址需要满足如下条件:

1) 由四组不大于255的数字组成,中间由“.”连接

2) 取值范围为0.0.0.0-255.255.255.255

一个IP地址可以看成是四组0-255的数组中间由.隔开,进一步可以看成是0-255.重复三次(注意0-255后有点),后边再跟上一个0-255的数字。

下面对0-255的数字可能的组成情况进行分析:

数字

取值

正则表达式

三位数

25开头

250-255

25[0-5]

20-24开头

200-249

2[0-4][0-9]

1开头

100-199

1[0-9][0-9]等价于1d{2}

二位数

两位数

10-99

[1-9]d

一位数

一位数

0-9

d

将上述五种情况组合在一起就是我们想要的结果,这里注意五种情况之间是或的关系,用|连接,可以得到(0-255)的正则表达式如下:

(25[0-5])|(2[0-4]d)|(1d{2})|([1-9]d)|d

以上是一组0-255的数据,上边已经分析了思路,IP由三组(0-255).和一组0-255组成,三组(0-255).就是(0-255).重复三次。

首先是(0-255).的表达式:

((25[0-5])|(2[0-4]d)|(1d{2})|([1-9]d)|d).

然后重复三次:

(((25[0-5])|(2[0-4]d)|(1d{2})|([1-9]d)|d).){3}

最后加上一组(0-255):

(((25[0-5])|(2[0-4]d)|(1d{2})|([1-9]d)|d).){3}((25[0-5])|(2[0-4]d)|(1d{2})|([1-9]d)|d)

为了更严谨点,需要加上开始和结束限定符,如下所示:

^(((25[0-5])|(2[0-4]d)|(1d{2})|([1-9]d)|d).){3}((25[0-5])|(2[0-4]d)|(1d{2})|([1-9]d)|d)$

下面开始验证,新建一个ip.txt,内容如下:

290.244.1900.3

254.263.233.0

192.168.266.900

aa.3.0.1

2.2.2.3b

127.02.0.00

192.168.212.11

0.0.0.0

255.255.255.255

其中只有最后三行的IP地址是正确的,我们检验下刚才写的正则表达式:

image

可以看到输出结果达到了预期的效果,证明正则表达式是有效的。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。