前言

使用man grep查看grep的帮助文档,有如下内容:

image

可以看出,正则表达式由三类,分别是

基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称 BREs)

扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs)

Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称 PREs)

由于BREs语法中需要大量转义字符,导致正则表达式不易看懂,因此本文使用Perl类型的正则表达式。

1.校验MAC地址

我们常见的MAC地有如下两种格式:

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

48:5D:60:61:3D:C5

我们以第一种为例,即一共有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]重复了两次,因此上述表达式可以写成

[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]{2}-[a-fA-F0-9]{2}-[a-fA-F0-9]{2}-[a-fA-F0-9]{2}

上述正则表达式太臃肿了,一组两位的其实我们可以看成

[a-fA-F0-9]{2}-重复了5次(注意后边有个短横线),最后又加了一组[a-fA-F0-9]{2},而其中的0-9可以用\d代替。基于这样的思路,对上述正则表达式进行修改后如下所示:

([a-fA-F\d]{2}-){5}[a-fA-F\d]{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地址,检测结果如下:

image

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

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]+.){1,2}可以拆分成如下内容:

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

[a-zA-Z0-9]+数字或字母重复1到多次

[a-zA-Z0-9]+.数字或字母重复1到多次后边加上英文句号.

([a-zA-Z0-9]+.){1,2}数字或字母重复1到多次后边加上英文句号.做为一个整体重复1到2次。

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

将上述邮箱@前缀的正则表达式和邮箱@后缀的正则表达式组合在一起,同时由于0-9的数字可以用\d表示,可以用\d替换内容中的0-9,最后得到的表达式我们想要的可以匹配邮箱的正则表达式,如下所示:

^[a-zA-Z\d][a-zA-Z\d-._]+@([a-zA-Z\d]+.){1,2}[a-zA-Z\d]+$

下面我们来检验下写出来的正则表达式:

新建一个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]等价于1\d{2}

二位数

两位数

10-99

[1-9]\d

一位数

一位数

0-9

\d

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

(25[0-5])|(2[0-4]\d)|(1\d{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)|(1\d{2})|([1-9]\d)|\d).

然后重复三次:

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

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

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

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

^(((25[0-5])|(2[0-4]\d)|(1\d{2})|([1-9]\d)|\d).){3}((25[0-5])|(2[0-4]\d)|(1\d{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

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

linux邮箱格式正则表达式,【深入浅出Linux】常用正则表达式校验相关推荐

  1. 最新最全的手机号正则表达式及其他常用正则校验

    一般表单页面都需要填写手机号,校验用户输入的手机号码是否正确,就要用到正则表达式,用正则表达式来匹配手机号段,如在运营商号段内,则号码正确.因此,需要知道运营商最新的号段,如下所示: 了解了运营商的最 ...

  2. 正则表达式入门及常用正则表达式

    常用正则表达式 1 正则表达式的基础概念 1.1 预定义字符 . 表示任何字符(与行结束符可能匹配也可能不匹配) \d 数字:[0-9] \D 非数字字符:[^0-9] \s 空白字符:[\t\n\x ...

  3. Linux语法格式是什么,linux命令语法格式

    一.命令的一般格式 command [option]... [argument]... command [options] [arguments] 具体说明: 1.command: 表示命令的名称,如 ...

  4. linux邮箱格式正则表达式grep,Linux系统grep正则表达式的介绍

    Linux系统正则表达式是字符串的标示方法, 主要的正则表达式有sed.vim.awk,当然还包括grep正则表达式.前文我们已经介绍了Linux系统正则表达式的用法,今天就来着重介绍一下Linux系 ...

  5. java 正则表达式验证邮箱格式是否合规 以及 正则表达式元字符

    package com.ykmimi.testtest; /*** 测试邮箱地址是否合规* @author ukyor**/ public class EmailTest {public static ...

  6. 正则表达式教程及常用正则表达式

    什么是正则表达式 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码. 正则表达式元素介绍 元 ...

  7. 正数、负数、和小数正则表达式 ios_最常用正则表达式,你要的都在这里了

    1 很多不太懂正则的朋友,在遇到需要用正则校验数据时,往往是在网上去找很久,结果找来的还是不很符合要求.所以最近L君把开发中常用的一些正则表达式整理了一下,在这里分享一下.可以给朋友们做个参考. 2 ...

  8. linux邮箱发文件夹,Linux下使用mail命令发送邮件

    Linux服务器mail程序本身就是调用sendmail来进行邮件发送的,sendmail服务器提供对外的邮件发送功能.CentOS默认不能发送邮件,需要发送邮件的童鞋可以安装一个sendmail程序 ...

  9. linux时间格式怎么写,linux基础--时间格式

    在linux中,经常会使用各种时间格式,特别在shell脚本中会经常调用,默认的时间格式为[root@liang-study ~]# date Wed Dec 14 19:43:07 CST 2016 ...

最新文章

  1. Octavia Rocky UDP 负载均衡功能试验
  2. php获取类的熟悉,php如何获取类的所有方法
  3. Kruskal算法的C语言程序
  4. stack vs heap:栈区分配内存快还是堆区分配内存快 ?
  5. mybatis学习笔记四(动态sql)
  6. iPhone开发经典语录
  7. 【手把手带你入门深度学习之150行代码的汉字识别系统】学习笔记 ·002 训练神经网络
  8. IRF之ARP-MAD检测
  9. JavaWeb之Cookie与Session
  10. C# web 后台页面间的跳转
  11. 蒜头君的生日(日期格式)
  12. 索尼Xperia X Performance解锁、刷TWRP、刷原厂固件、刷安卓8.1AOSP
  13. unity之动画编辑器
  14. WSL2 中 docker volume 的位置
  15. mysql isnum()_mysql 一些基础的语法和命令
  16. 什么样的域名才能算短域名?短域名还能有吗?
  17. 毕业设计之路(6)——uip
  18. 【Unity3d】将Particle转成UGUI
  19. kafka —— consumers 消费者 group 找不到得原因
  20. JAVA大学实用教程(第四版)课后习题一、二章答案及解析(自整理)

热门文章

  1. 手机音质变差_3.5mm接口取消之后手机音质变差了?不,其实它能做到完美
  2. Vue3+与Vue2共存
  3. 数字化基础建设水平和数字化市场环境相似,是长三角数字转型的优势
  4. Unity之ASE实现UI流光效果
  5. 信息学奥赛一本通 1351:【例4-12】家谱树
  6. 深圳“海上皇宫”主人郭奎章要做全球创业者公益演讲了?
  7. 面试常见问题及回答 面试技巧及注意事项
  8. 机器如何“猜你喜欢”?深度学习模型在1688的应用实践
  9. VMware ACE是什么?
  10. 实战案例,手把手教你构建电商用户画像 | 附代码