正则表达式详解(六、基础正则表达式总结)

11 篇文章 0 订阅
基础表达式
标识说明举例
^

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

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"

连续次数匹配

*

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

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

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

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

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

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

\{n,\}表示之前的字符连续出现至少n次,才会被匹配到.

常用符号使用

符号等同于/举例

. 表示匹配任意单个字符

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表示匹配单个非空白字符
分组与后向引用
\(    \)表示分组,我们可以将其中的内容当做一个整体,分组可以嵌套;注意小括号是英文状态的
\( ab\)表示将ab当做一个整体去处理。
\1表示引用整个表达式中第1个分组中的正则匹配到的结果。
\2表示引用整个表达式中第2个分组中的正则匹配到的结果。
注意:后向引用的排序号仅仅按照分组符号的左侧部分排序,分组符号的右侧部分不算在排序范围内。
常见符号转义
符号如何转义
.”\.”就表示单个”点”
*”\*”就表示单个”星”
匹配问号本身,只需要使用”?”即可
+匹配加号本身时,直接使用”+”
\反斜杠前面加上反斜杠即\\;注意此处正则使用用单引号例如:grep 'a\\\\ ' reg.txt  匹配的是a\\;若使用双引号会报错;

举例:

[root@hy ~]# cat regmob.txt 
张三	13691234567
李四	13522223333
王五	13698766789
赵二	13933332222
傻子	13666666889999

1、要匹配出上述文件中是手机号的行

 说明:两端的”\b”表示锚定词首与锚定词尾,词首以136开头,后边匹配8个数字锚定词尾;

问题:如何匹配以136或139开头的手机号呢?

 大家看下下边写法与上边写法有啥不同?egrep 或者grep -E 扩展正则表达式用法

2、从ifconfig命令的结果中找出IPV4格式的IP地址

[root@hy ~]# ifconfig | grep "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}"

 说明:

”\([0-9]\{1,3\}\.\)”,它表示一个最少为1位数字,最多为3位数字的字符串,并且这个字符串后面跟随了一个”点”,我们把这个带有点的数字字符串当做一个整体;

”\{3\}”,它表示之前的字符需要连续出现3次,当它与红色部分的正则结合在一起时,表示符合红色部分正则的字符串需要连续出现3次;

”[0-9]\{1,3\}”,它表示一个最少为1位数字,最多为3位数字的字符串;

当上述三部分正则结合在一起时,就能表示一个类似IPV4地址的字符串(此处暂不考虑1到254的取值范围)。

 考虑1-254的情况:

IPV4必须满足以下四条规则:

1、任何一个1位或2位数字,即0-99;
2、任何一个以1开头的3位数字,即100-199;
3、任何一个以2开头、第2位数字是0-4之间的3位数字,即200-249;
4、任何一个以25开头,第3位数字在0-5之间的3位数字,即250-255。

这样把规则全部罗列出来之后,构造一个正则表达式的思路就清晰了。

首先满足第一条规则的正则是:[0-9]{1,2}
首先满足第二条规则的正则是:1[0-9]{2}
首先满足第三条规则的正则是:2[0-4][0-9]
首先满足第四条规则的正则是:25[0-5]

把它们组合起来,就得到一个匹配0-255数字的正则表达式了:

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

IPV4由四组这样的数字组成,中间由.隔开,或者说由三组数字和字符.和一组数字组成,所以匹配IPV4的正则表达式如下:

ifconfig | grep -E "((([0-9]{1,2})|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.){3}(([0-9]{1,2})|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))"

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值