正则表达式详解(七、扩展正则表达式)

11 篇文章 0 订阅

”基本正则表达式”与”扩展正则表达式”大部分的符号都是一致的,下边我们用列表的方式看看区别,同时举例感受:

用法:grep -E   "reg"   文本文件   

基础表达式与扩展表达式通用
标识说明举例
^

:表示锚定行首,此字符后面的任意内容必须出现在行首,才能匹配。

grep ^IP /etc/sysconfig/network-scripts/ifcfg-ens32

匹配以“IP”开头的行

$表示锚定行尾,此字符前面的任意内容必须出现在行尾,才能匹配

grep IP$ /etc/sysconfig/network-scripts/ifcfg-ens32

匹配以“IP”结尾的行

^$表示匹配空行,这里所描述的空行表示”回车”,而”空格”或”tab”等都不能算作此处所描述的空行

^abc$表示abc独占一行时,会被匹配到

grep ^NAME=\"ens32\"$ /etc/sysconfig/network-scripts/ifcfg-ens32

注意:引号要用 \" 转义

\<或者\b匹配单词边界,表示锚定词首,其后面的字符必须作为单词首部出现grep "\<NAME" /etc/sysconfig/network-scripts/ifcfg-ens32
\>或者\b匹配单词边界,表示锚定词尾,其前面的字符必须作为单词尾部出现

grep "no\>" /etc/sysconfig/network-scripts/ifcfg-ens32 -n

结果如下:
3:BROWSER_ONLY="no"
6:IPV4_FAILURE_FATAL="no"
10:IPV6_FAILURE_FATAL="no"
20:IPV6_PRIVACY="no"

将”\<“与”\>”结合在一起使用,只有当XXX是一个独立单词时候才会匹配到。

\B匹配非单词边界,与\b正好相反

grep "no\B" /etc/sysconfig/network-scripts/ifcfg-ens32 -n

结果如下:
2:PROXY_METHOD="none"
4:BOOTPROTO="none"

以下常用符号基础正则与扩展正则相同

符号等同于/举例

. 表示匹配任意单个字符

grep "h.l" regex.txt

* 表示匹配前面的字符任意次,包括0次

\ 表示转义符,当与正则表达式中的符号结合时表示符号本身
[ ] 表示匹配指定范围内的任意单个字符

[^ ] 表示匹配指定范围外的任意单个字符

[^0-9]与[^[:digit:]]等效

[^a-z]与[^[:lower:]]等效

[^A-Z]与[^[:upper:]]等效

[^a-zA-Z]与[^[:alpha:]]等效

[^a-zA-Z0-9]与[^[:alnum:]]等效

[[:alpha:]] 表示任意大小写字母

[a-zA-Z]与[[:alpha:]]等效

[[:lower:]] 表示任意小写字母[a-z]与[[:lower:]]等效
[[:upper:]] 表示任意大写字母[A-Z]与[[:upper:]]等效
[[:digit:]] 表示0到9之间的任意单个数字(包括0和9)[0-9]与[[:digit:]]等效
[[:alnum:]] 表示任意数字或字母[a-zA-Z0-9]与[[:alnum:]]等效
[[:space:]] 表示任意空白字符,包括"空格"、"tab键"等
[[:punct:]] 表示任意标点符号

#简短格式并非所有正则表达式解析器都可以识别   *grep 使用时需要加上-P 选项*

\d 表示任意单个0到9的数字
\D 表示任意单个非数字字符
\t 表示匹配单个横向制表符(相当于一个tab键)
\s表示匹配单个空白字符,包括"空格","tab制表符"等
\S表示匹配单个非空白字符
连续次数匹配
基础扩展说明

*

表示前面的字符连续出现任意次,包括0次。
. 表示任意单个字符。
.* 表示任意长度的任意字符,与通配符中的*的意思相同。
\? ?

表示匹配其前面的字符0或1次

\++表示匹配其前面的字符至少1次,或者连续多次,连续次数上不封顶。
\{n\} {n}

表示前面的字符连续出现n次,将会被匹配到。

\{x,y\}{x,y}表示之前的字符至少连续出现x次,最多连续出现y次,都能被匹配到,换句话说,只要之前的字符连续出现的次数在x与y之间,即可被匹配到。
\{,n\} {,n}

表示之前的字符连续出现至多n次,最少0次,都会陪匹配到。

\{n,\}{n,}表示之前的字符连续出现至少n次,才会被匹配到.
分组与后向引用
基础扩展说明
\(    \)()表示分组,我们可以将其中的内容当做一个整体,分组可以嵌套;注意小括号是英文状态的
\( ab\)(ab)表示将ab当做一个整体去处理。
\1表示引用整个表达式中第1个分组中的正则匹配到的结果。
\2表示引用整个表达式中第2个分组中的正则匹配到的结果。

注意:扩展正则表达式中,还有一个常用的符号,是基本正则表达式中所没有的,它就是”|”,表示或的意思。

举例:匹配比较标准合法的邮箱地址,要求:

1、邮箱字符串中必须包含”@”符。
2、”@”符前面的字符只能是小写字母或数字,不能包含特殊符号。
3、”@”符前面的字符数量至少需要4个,至多为16个。
4、邮箱必须以”com”、”net”、”org”、”edu”等顶级域名结尾(此处为了方便演示,不判断更多的域名)。
5、顶级域名之前必须包含一个”点”,换句话说就是,邮箱必须以”.com”、”.net”、”.org”、”.edu”结尾。
6、”@”与”.”之间的字符数量不能超过12个,不能低于2个。
7、”@”与”.”之间的字符只能是小写字母或数字,不能包含特殊符号。

[root@hy ~]# cat email.txt
lht@163.com
zhang01@263.net
wang@bjqq.cn
zhaoliu@jiaoyu.edu
xiaopingguo@mailjia.org

grep -E -n "[a-z0-9]{4,16}@[a-z0-9]{2,12}\.((com)|(net)|(edu)|(org))" email.txt 

 ①实现了条件2,实现了条件3,实现了条件1,实现了条件7,实现了条件6,实现了条件5,实现了条件4;其中lht@163.com及wang@bjqq.cn不满足条件3和4未被匹配到。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值