正则表达式(五)—扩展正则表达式

>>2020,微服务装逼指南

正则表达式 

扩展正则表达式


一位看了前面几篇文章朋友向我反馈,说前面匹配次数相关的正则中,前后两个没必要加,意思是"qin{2}" 写成"qin"{2}" 就可以了。确实没错,不过不能直接改成"qin"{2}" ,因为这属于扩展正则表达式的内容了,这也是本文需要讲的内容。

在Linux中,正则表达式可以分为"基本正则表达式"和"扩展正则表达式",前面几篇文章都是讲述的基本正则表达式,那么本文我们一起来总结下扩展正则表达式的内容。

文章继续以实例的模式和大家一起学习,下面是用来实验所用的文件。

正则表达式(五)---扩展正则表达式


1
{ }、()、+、?、

其实,扩展正则表达式基本正则表达式90%的用法是一摸一样的,只是有那么几个符号有区别,这几个符号就是{ }、()、+、?,分别对应基本正则表达式中的{ }、()、+、? ,是不是觉得扩展正则表达式方便多了。

要使得grep将正则表达式中的符号当做扩展表达式去理解,需要用到-E选项,如下示例表达式就是利用扩展正则表达式 {}匹配文件中qi后面出现2次字符n的行,其对应基本表达式:

            cat regular_3.txt | grep -n --color  "qin{2}"

正则表达式(五)---扩展正则表达式

2
|

在扩展正则表达式中,还有一个很常用的符号 |它表示或,这是基本正则表达式所没有的,这个符号通常会和分组结合在一起用,下面的例子很清楚的告诉我们 | 的用法

正则表达式(五)---扩展正则表达式


那么如果 |  不和分组结合用,会有什么区别了?还是看例子

正则表达式(五)---扩展正则表达式

很明显,|  有没有和分组一起用,区别很大,从上面的匹配结果很容易看出,"(n|z)$" 表示匹配以n结尾或者以z结尾的行;而"n|z$"则表示匹配以z结尾或者含有n的行。也就是说,如果不用分组,后面的$不会作用在前面的字符n上。 


3
总结

扩展正则表达式就总结完了,多,有了前面基本正则表达式的基础,扩展正则表达式就是这么简单。好了,现在整个正则表达式的总结已经完了,基本上大家在工作中能用到的也就差不多这些了,最后大家一起思考一个综合性的正则表达式问题吧。

给出一个测试文件,找出文件中的邮箱地址,要解决这个问题,首先得知道什么是合法的邮箱地址,在网上搜了个关于合法邮箱地址的条件,懒得打字,就截图过来了。

正则表达式(五)---扩展正则表达式

下面是测试文件以及相应的答案。

正则表达式(五)---扩展正则表达式

正则表达式(五)---扩展正则表达式



总结

本文是正则表达式系列的第五篇文章,主要总结了扩展正则表达式和基本正则表达式的不同之处,到此正则表达式系列文章已经完结,将这些掌握了,应该能应付大家工作中的大部分需要了。后面会继续更新其它内容文章,希望对大家有所帮助,文章中如有遗漏或错误之处,还望大家指出!


推荐阅读:

【Linux命令】 grep命令基本用法

正则表达式(一)---位置锚定

         正则表达式(二)---匹配次数的正则

正则表达式(三)---常用符号

              正则表达式(四)---分组、后向引用与转义


专注服务器后台技术栈知识总结分享

欢迎关注交流共同进步

正则表达式(五)---扩展正则表达式