正则表达式之扩展正则表达式 扩展正则表达式

Extended Regular Expression

主要内容就是对基本正则表达式的扩展。

  • 用正则表达式和扩展正则表达式分别取ip地址
## 使用基础正则表达式需要在{}前加

[10:09:47 root@C8-3-55 ~]#ifconfig ens33 | grep -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' | head -n1 
10.0.0.55
## 使用-E启用扩展正则表达式,{}前不需要加
[10:09:59 root@C8-3-55 ~]#ifconfig ens33 | grep -E -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' | head -n1   
10.0.0.55
## 利用扩展正则表达式,同时使用()进行分组
[10:11:34 root@C8-3-55 ~]#ifconfig ens33 | grep -E -o '([0-9]{1,3}.){3}[0-9]{1,3}' | head -n1
10.0.0.55

但这样是由问题的,ip地址是有取值范围的

  • 利用扩展正则表达式分别表示0-9,10-99,100-199,200-249、250-255

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

  • 取符合规则的ip地址
1. 正则表达式对只能取数字[0-9],所以不能直接表达0-255或者1-255

2. 我们直接表示0-255不容易表示出来,我们就分段进行表示

3. [0-9]|[1-9][0-9] 两个[0-9]可以合并,合并后就是[1-9]?[0-9]

4. [1-9]?[0-9] 表示个位是0-9十位是1-9的两位数或者1-9的个位数

5. [1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5] 合起来就表示 1-255其中某一个数

6. IP地址的格式是xxx.xxx.xxx.xxx,其中首位不为0,且每位取值范围[1-255].[0-255].[0-255].[0-255]

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

于是乎,我们最终就能用正则表达式取出合规的IP地址了!


[10:45:34 root@C8-3-55 ~]#ifconfig | grep -E -o '([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(.[1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]){3}'
10.0.0.55
255.0.0.0
127.0.0.1
255.0.0.0

我居然能看懂这一串非人类语言了,我都开始佩服我自己了。搞明白正则以后,整个人都疯了。