关于正则表达式第一篇

正则表达式在编程语言中,数据库中,linux中都有着广泛的应用,一说起正则表达式就有些高深晦涩的味道,正则表达式精炼而重要,在Linux中有着举足轻重的作用,也是学好sed,awk的一个基本门槛。
正则表达式是基于正则表达式引擎来实现的,引擎主要有以下两类。可能大家对这个比较陌生。
POSIX基本正则表达式引擎  BRE
POSIX扩展正则表达式引擎  ERE
大多数的Linux实现中都是BRE,也是默认的实现,还有扩展的实现就是ERE.
像grep,awk就支持基本和扩展的引擎,sed只支持基本引擎,也是基于性能的考虑。
学习awk相当于学习了一门新的编程语言,所以awk的功能很完善,扩展的引擎也支持了。
grep可以实现扩展的引擎,但是需要使用-E选项。

比如我们想查看一个字符bt,在b和t中间的字符可以出现0次或者1次。
bt,bat,bet等都是匹配的字符。

$ echo "bt" |grep 'b[ae]?t‘            --如果没有使用ERE就不会匹配到任何的数据

$ echo "bt" |grep -E 'b[ae]?t'     --启用了ERE之后,就可以正确匹配了。
bt

关于BRE,主要有以下的模式
纯文本
特殊字符
锚字符
点字符
字符组
排除字符组
使用区间
特殊字符组
星号

--纯文本

对于纯文本来说是大小写敏感的,空格和数字也可以正常匹配,胆识空格不需要转义
比如我们需要匹配 一个字符串出现this的情况,使用This和this就有很大的不同。
---使用sed来匹配
$ echo "This is a test"|sed -n '/This/p'
This is a test
echo "This is a test"|sed -n '/this/p'
$
--使用awk来匹配
$ echo "This is a test"|awk '/This/{print $0}'
This is a test

--使用grep来匹配
$ echo "This is a test"|grep ‘This'
This is a test
$ echo “This is a test”|grep -i ‘THis‘    --忽略大小写
This is a test

--特殊字符
以下的字符在正则表达式中会被视为特殊字符。
.*[]^$\+?|()
所以不能在文本中单独使用如上的特殊字符,需要加\做一个转义。
--sed来匹配字符\
echo "\ is a special character"|sed -n '/\\/p'
\ is a special character

--sed来匹配字符$,以下是几种测试的场景,可以对比一下输出结果。

$ echo "The price is $5.00"|sed -n '/$/p'
The price is .00
$ echo "The price is $5.00"|sed -n '/\s/p'
The price is .00

$ echo "The price is $5.00"
The price is .00
$ echo "The price is \$5.00"
The price is $5.00
$ echo 'The price is $5.00'
The price is $5.00
$ echo 'The price is $5.00'|sed -n '/\$/p'
The price is $5.00
echo "The price is $5.00"|sed -n '/\$/p'

对于字符/
$ echo "3 / 2"|sed -n '///p'
sed: -e expression #1, char 3: unknown command: `/‘
出这个错误是因为左斜线不是正则表达式的特殊字符的一部分,但是也需要转义,下面这样就没有问题了。
$ echo "3 / 2"|sed -n '/\//p'
3 / 2

后续部分在第二篇中继续分享。

时间: 2024-09-23 21:26:40

关于正则表达式第一篇的相关文章

正则表达式小结篇

正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.该模式描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 下面小编给大家总结了些关于正则表达式知识点,具体内容如下所示: 1.元字符 [拥有特殊含义的元字符]   \d -> 匹配一个0-9的数字,相当于[0-9],和它相反的是\D ->匹配一个除了0-9的任意字符   \w -> 匹配一个0-9.a-z.A-Z._的数字或字符,相当于[0

关于正则表达式第二篇

在第一篇中介绍了关于纯文本和特殊字符在正则表达式中的应用,来看看其它的一些相关的点.--关于锚定 锚定就跟大家在开发网页的时候使用的锚定是一个意思,其实就是给一段字符做个标识.对于行首使用是^,对于行尾使用时$,可能大家并不陌生. 锁定在行首 $ echo "The book store" |sed -n '/^book/p'     --这个命令没有输出,是因为锚定不在行首. $ echo "Books are great"|sed -n '/^Book/p'  

周末总结正则表达式(完整篇)

hi 又到周末,结果这周没有电影去看,正好练练正则表达式吧,暖暖手 1.正则表达式-完结篇 ---工具类开发--- <?php /* * PHP 正则表达式工具类 * 描述:进行正则表达式匹配,有常用的正则表达式以及允许用户自定义正则表达式进行匹配 */ class regexTool{ //定义常用正则表达式,并用数组对的方式存储 private $validate=array( 'require' => '/.+/', 'email' => '/^\w+([-+.]\w+)*@\w+

如何提高WEB程序的效率 (第一篇SQL篇)  (转)

web|程序 如何提高WEB程序的效率 (第一篇"SQL篇") 很多网友非常不喜欢用ASP来编程,他们总是抱怨说ASP程序太慢,效率太低.更希望用PHP,JSP等来写程序.其实不能从 "认为" 这个角度来看问题 ,而应该从实际中看问题,ASP真的很慢的吗,那么微软的站为何用ASP也不慢呢?PHP真的很快吗,其实它也仍然是解释性的语言.只不过在Linux下的结合比较好而以.JSP的开发也不会简单到何处,而且要通过JDBC-ODBC桥才能连接ACCESS库等,这种情况下

如何提高WEB程序的效率 (第一篇)

web|程序 很多网友非常不喜欢用ASP来编程,他们总是抱怨说ASP程序太慢,效率太低.更希望用PHP,JSP等来写程序.其实不能从 "认为" 这个角度来看问题 ,而应该从实际中看问题,ASP真的很慢的吗,那么微软的站为何用ASP也不慢呢?PHP真的很快吗,其实它也仍然是解释性的语言.只不过在Linux下的结合比较好而以.JSP的开发也不会简单到何处,而且要通过JDBC-ODBC桥才能连接ACCESS库等,这种情况下效率也不高. 其实,三种语言各有特点,就是优,缺点.作为一个程序员不应

JavaScript正则表达式(总结篇)

本文是小编参考其他有关js正则表达式资料整理的,主要目的有两个:一:自我复习归纳总结.二:共享方便大家搜索 .js正则表达式感兴趣的朋友可以一起学习,没有写的知识点,欢迎大家补充,共同学习进步. 验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(0|[1-9][0-9]*)$ 验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$ 验证有1-3位小数的正实数:^[0-9]+

CoreOS Fest 系列之第一篇:容器江湖

本文讲的是CoreOS Fest 系列之第一篇:容器江湖,[编者的话] 这是总结 CoreOS Fest 大会的三篇文章之一,主要介绍了 CoreOS 公司与 Docker 公司之争,新成立的 appc 规范委员会, Tectonic 平台, Kubernetes 项目. 最近在旧金山, Linux 容器已经显得非常有「钱」景,看起来每个人都想从这个有几十亿美金规模的新市场中分得一杯羹.多家创业公司和云主机公司已经或者即将召开有关容器的大会,包括 4 月 17 日召开的 Container Ca

【实战HTML5与CSS3 第一篇】初探水深,美丽的导航,绚丽的图片爆炸!!

原文http://www.cnblogs.com/yexiaochai/archive/2013/04/29/3050798.html 前言 先八卦一下,我昨天离职了,把电脑也退了,离职前,我发了一封邮件给整个部门,陈述自己的不舍与团队管理问题(估计传说中的leader要抓狂了),然后就昏昏的回家了,所以昨天没有什么产出. 最近经常有朋友惊叹我的发帖速度很快,其实是有原因的,我最近两周要离职,所以就不太理我那传说中的leader了,每天多出很多时间可以学习. 但是,下周后便会入职一家新公司了,我

[老老实实学WCF] 第一篇 Hello WCF

原文:[老老实实学WCF] 第一篇 Hello WCF 老老实实学WCF  第一篇 Hello WCF   WCF(Windows Communication Foundation)是微软公司推出的面向服务技术的集大成者,涵盖继承了其之前发布的所有的分布式应用程序的编程模型,涉及面之广,技术之复杂,结构之零散,让我们初学这门技术的菜鸟时常有无处下手的感觉,此系列博文系笔者艰难探索WCF技术过程的学习笔记,笔者抱着老老实实的态度,力图扎扎实实,循序渐进地学好这门技术,文中难免有疏漏和错误之处,还请