正则表达式浅解

正则表达式:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。

扩展正则表达式元字符:

字符匹配:
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…)
[:digit:] 十进制数字
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号

匹配次数:
用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括0次 贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
? 匹配其前面的字符0或1次
+ 匹配其前面的字符至少1次
{n} 匹配前面的字符n次
{m,n} 匹配前面的字符至少m次,至多n次
{,n} 匹配前面的字符至多n次
{n,} 匹配前面的字符至少n次

位置锚定:定位出现的位置
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词尾锚定;用于单词模式的右侧
\<PATTERN\> 匹配整个单词

分组:
()
后向引用:\1, \2, …
或者:
a|b: a或b
C|cat: C或cat
(C|c)at:Cat或cat

正则表达式中的3个重要符号:Bracket(括号), caret(插入符号)和Dollars(美元符号)

Bracket:

在正则表达式中有3种类型的括号201111170806251752

方括号 “[]”和花括号”{}” 。

方括号”[]”内是需要匹配的字符,花括号”{}”内是指定匹配字符的数量。

圆括号”()” 则用来分组。

Caret:

插入符号 “^” 表示正则式的开始。

Dollars:

美元符号”$” 表示正则式的结束。

现在你知道上面的3个语法后,你就可以写世界上任何一条验证规则了。比如下面的例子就很好的说明了上面3条正则语法是如何协调运作的:

^[a-z]{1,2}$

  • 上面的这条正则式只能匹配a-z的英文字母,同样是在中括号中标明匹配范围。
  • 花括号中则是标明匹配字符串的最小长度和最大长度。
  • 最后为了让表达式更规则,分别在开头和结尾加上了插入符号”^”和美元符号”$”。

现在我们就用上面的3条语法来实现一些正则表达式的验证规则:

1.如何匹配像91230456, 01237648这样的固定8位数?

“^[0-9]{8}$”

2.如何验证最小长度为3最大长度为7的数字,如:123, 1274667, 87654?

“^[0-9]{3,7}$”

3.如何验证像LJI10201020那样的发票编号,前3个是字母剩余为8位长度的数字?

“^[[:alpha:]]{3}[0-9]{8}$”

4.如何验证简单的网址URL格式?

“^www[.][[:alnum:]]{1,}[.](com|org)$”

5.如何验证email格式?

“^[[:alnum:]]{1,}@[[:alnum:]]{1,}.(com|ong)$”

6.如何验证值在0-25的数字?

“^(([0-9])|(1[0-9])|(2[0-5]))$”

7.验证格式为YYYY/MM/DD的日期?

“^(1[9][7-9][0-9]|2[0][0-9][0-9])[/]([1-9]|0[1-9]|1[0-2])[-/]([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])$”

以上例子由浅入深,基本涵盖了正则表达式的一些基本用法,有利于初级阶段的学习与思考。

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95124

(1)
烟花儿烟花儿
上一篇 2018-04-07
下一篇 2018-04-07

相关推荐

  • RAID和逻辑卷

    1、RAID技术
    2、RAID实验
    3、逻辑卷管理
    4、逻辑卷快照

    Linux笔记 2018-06-10
  • 任务计划

    at crontab

    Linux笔记 2018-05-05
  • 学习笔记(11)

    学习笔记(11)

    Linux笔记 2018-04-30
  • Linux用户与组管理详解

    在linux系统上,用户管理是基于用户名和密码的方式进行资源的分配,了解和掌握用户与组的管理是从事运维工作所必须具备的能力,也是将来从事运维行业的重要工作之一。

    2018-04-03
  • 第六次作业

    简述osi七层模型和TCP/IP五层模型 OSI:是ISO(国际标准化组织)组织在1985年研究的网络互连模型。 OSI将网络定义为7层,每一层实现各自的功能和协议,并完成与相邻层的接口通信。 物理层: 这一层是指物理设备 数据链路层:这层通过帧封装进行传递 网络层: 通过ip寻址来建立两个节点之间的连接这一层就是我们经常说的IP协议层。IP协议是Inter…

    Linux笔记 2018-08-08
  • 马哥网络班第31期——第二周作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示
    2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示
    3、请使用命令行展开功能来完成以下练习
    (1)创建/tmp目录下的:a_c,a_d,b_c,b_d
    (2)创建/tmp/mylinux目录下的:
    4、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息
    5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
    6、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其他字符)的文件或目录
    7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录
    8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其他任意长度任意字符的文件或目录
    9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22
    10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中
    11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中
    12、复制/etc目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中

    Linux笔记 2018-07-18