Linux/Python学习论坛-京峰教育

 找回密码
 立即注册

一键登录:

搜索
热搜: 活动 交友 discuz
查看: 866|回复: 0

版主学习笔记之扩展正则表达式

[复制链接]

208

主题

269

帖子

1936

积分

超级版主

Rank: 8Rank: 8

积分
1936
发表于 2015-4-10 15:58:21 | 显示全部楼层 |阅读模式

扩展的正则表达式是针对基础正则表达式的一些补充,实际上扩展正则表达式比基础正则表达式多了几个重要的符号,不过要注意的是,在使用这些扩展符号时,需要使用egrep或grep -E命令。
1、"?" 符号

"?" 符号用于匹配前一个字符0次或1次,所以"ro?t"仅能匹配rot或rt。
例如:
匹配rt成功
[root@mail ~]# echo "rt" | grep -E "ro?t"
rt

匹配rot成功
[root@mail ~]# echo "rot" | grep -E "ro?t"
rot

匹配root不成功,未输出任何内容。
[root@mail ~]# echo "root" | grep -E "ro?t"
[root@mail ~]#

2、"+" 符号

"+" 符号用于匹配前一个字符1次以上,所以"ro+t"就可以匹配rot、root等。
例如:
匹配rot成功
[root@mail ~]# echo "rot" | grep -E "ro+t"
rot

匹配root成功
[root@mail ~]# echo "root" | grep -E "ro+t"
root

匹配roooot成功
[root@mail ~]# echo "roooot" | grep -E "ro+t"
roooot

3、"|" 符号

"|" 符号是"或"的意思,即多种可能的罗列,彼此间是一种分支关系,比如说有些地区固定电话的区号是3位数,有些地方是4位数,这样针对不同的区号就有不同的固定电话表达方式,例如
区号是3位的固定电话的正则表达方式
^0[0-9]\{2\}-[0-9]\{8\}

区号是4位的固定电话的正则表达式
^0[0-9]\{3\}-[0-9]\{8\}

两种区号的固定电话号码也可以这样写
^[0-9]\{2,3\}-[0-9]\{8\}

如果使用"|"也可以,但比上面的简单
^0[0-9]\{2\}-[0-9]\{8\}|^0[0-9]\{3\}-[0-9]\{8\}

4、"()" 符号

"()" 符号通常需要和上面的"|"符号联合使用,用于枚举一系列可替换的字符,如固定电话的区号和电话号码之前,可能用"-"符号或者用一个空格来连接,用于匹配的正则表达式如下:
使用"()"和"|"定义连接符的写法,使得028-99999999和0281 99999999都可以匹配。
^0[0-9]\{2,3\}(-| )[0-9]\{8\}

使用"[]" 也可以
^0[0-9]\{2,3\}[\ \-][0-9]\{8\}

虽然以上这两种写法没有本质的不同,因为"()"和"|"可以和"[]"相互混用,但是在某些场景下,"()"和"|"可以做得更多,比如说像hard、hold或hood等这类开头和结尾的字母都一样的单词,要匹配这些就必须使用"()"和"|",如下:
使用"()"和"|"匹配hard、hold或hood
h(ar|ol|oo)d即可



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|京峰教育,只为有梦想的人 ( 京ICP备15013173号 )

GMT+8, 2019-1-20 17:43 , Processed in 0.021207 second(s), 14 queries , Apc On.

快速回复 返回顶部 返回列表