10.1.3 扩展的正则表达式
顾名思义,扩展的正则表达式一定是针对基础正则表达式的一些补充。实际上,扩展正则表达式比基础正则表达式多了几个重要的符号。不过要注意的是,在使用这些扩展符号时,需要使用egrep命令。
·“?”符号
“?”符号用于匹配前一个字符0次或1次,所以“ro?t”仅能匹配rot或rt。
·“+”符号
“+”符号用于匹配前一个字符1次以上,所以“ro+t”就可以匹配rot、root等。
·“|”符号
“|”符号是“或”的意思,即多种可能的罗列,彼此间是一种分支关系。比如说有些地区固定电话的区号是4位数,有些地方却是3位数,这样针对不同的区号就有不同的固定电话的表示方式,如下所示:
- #
- 区号是3
- 位的固定电话的正则表达式方式
- ^0[0-9]\{2\}-[0-9]\{8\}
- #
- 区号是4
- 位的固定电话的正则表达式方式
- ^0[0-9]\{3\}-[0-9]\{8\}
- #
- 两种区号的固定电话号码可以如下写
- ^0[0-9]\{2,3\}-[0-9]\{8\}
- #
- 使用"|"
- 符号也可以,但是显然比上面的方式麻烦
- ^0[0-9]\{2\}-[0-9]\{8\}|^0[0-9]\{3\}-[0-9]\{8\}
·“()”符号
“()”符号通常需要和“|”符号联合使用,用于枚举一系列可替换的字符。比如说固定电话的区号和电话号码之间,可能用“-”符号或者用一个空格连接,用于匹配的正则表达式如下:
- #
- 使用"()"
- 和"|"
- 定义连接符的写法
- #
- 这样021-88888888
- 和0511 88888888
- 都可以匹配
- ^0[0-9]\{2,3\}(-| )[0-9]\{8\}
- #
- 这种写法可以换用"[]"
- 符号表示
- ^0[0-9]\{2,3\}[\ \-][0-9]\{8\}
虽然以上这两种写法没有本质的不同,因为“()”和“|”可以和“[]”相互混用,但是在某些场景下,“()”和“|”可以做得更多,比如说像hard、hold或hood等这类开头和结尾的字母都一样的单词,要匹配这些就必须使用“()”和“|”了。如下所示:
- #
- 使用"()"
- 和"|"
- 匹配hard
- 、hold
- 或hood
- h(ar|oo|ol)d