**正则表达式 **
扩展正则表达式
一位看了前面几篇文章朋友向我反馈,说前面匹配次数相关的正则中,前后两个没必要加,意思是”qin{2}” 写成”qin”{2}” 就可以了。确实没错,不过不能直接改成”qin”{2}” ,因为这属于扩展正则表达式的内容了,这也是本文需要讲的内容。
在Linux中,正则表达式可以分为”基本正则表达式“和”扩展正则表达式“,前面几篇文章都是讲述的基本正则表达式,那么本文我们一起来总结下扩展正则表达式的内容。
文章继续以实例的模式和大家一起学习,下面是用来实验所用的文件。
其实,扩展正则表达式基本正则表达式90%的用法是一摸一样的,只是有那么几个符号有区别,这几个符号就是{ }、()、+、?,分别对应基本正则表达式中的{ }、()、+、? ,是不是觉得扩展正则表达式方便多了。
要使得grep将正则表达式中的符号当做扩展表达式去理解,需要用到**-E**选项,如下示例表达式就是利用扩展正则表达式 {}匹配文件中qi后面出现2次字符n的行,其对应基本表达式:
cat regular_3.txt | grep -n –color “qin****{2****}”
在扩展正则表达式中,还有一个很常用的符号 | ,它表示或,这是基本正则表达式所没有的,这个符号通常会和分组结合在一起用,下面的例子很清楚的告诉我们 | 的用法
那么如果 | 不和分组结合用,会有什么区别了?还是看例子
很明显,| 有没有和分组一起用,区别很大,从上面的匹配结果很容易看出,”(n|z)$” 表示匹配以n结尾或者以z结尾的行;而”n|z$”则表示匹配以z结尾或者含有n的行。也就是说,如果不用分组,后面的$不会作用在前面的字符n上。
扩展正则表达式就总结完了,多,有了前面基本正则表达式的基础,扩展正则表达式就是这么简单。好了,现在整个正则表达式的总结已经完了,基本上大家在工作中能用到的也就差不多这些了,最后大家一起思考一个综合性的正则表达式问题吧。
给出一个测试文件,找出文件中的邮箱地址,要解决这个问题,首先得知道什么是合法的邮箱地址,在网上搜了个关于合法邮箱地址的条件,懒得打字,就截图过来了。
下面是测试文件以及相应的答案。
本文是正则表达式系列的第五篇文章,主要总结了扩展正则表达式和基本正则表达式的不同之处,到此正则表达式系列文章已经完结,将这些掌握了,应该能应付大家工作中的大部分需要了。后面会继续更新其它内容文章,希望对大家有所帮助,文章中如有遗漏或错误之处,还望大家指出!
推荐阅读:
专注服务器后台技术栈知识总结分享
欢迎关注交流共同进步