O(1) 的小乐

Job Hunting

公告

记录我的生活和工作。。。
<2010年9月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

统计

  • 随笔 - 182
  • 文章 - 1
  • 评论 - 41
  • 引用 - 0

留言簿(10)

随笔分类(70)

随笔档案(182)

文章档案(1)

如影随形

搜索

  •  

最新随笔

最新评论

阅读排行榜

评论排行榜

Master regular expression Chapter1

Master Regular Expression     Jeffrey E.F. Friedl


序言:

孟岩
1988年,被誉为“软件世界的爱迪生”发明了BSD,TCP/IP ,csh, vi NFS的sun首席科学家Bill Joy 曾经不无调侃的说,在计算机体系结构领域里,缓存是唯一能称得上伟大的思想。

在计算机软件领域里,称得上伟大发明的,Packet Switched Network,Web,Lisp,Hash algorithm,UNIX,Compile Techniques,Relational Database Model,Object Oriented,XML,而Regular Expression 绝对比应该被漏掉!

正则表达式不是每天都会用到,而其密码般的形象,随着时间的推移很容易被忘记,所以经常发生的情况是,开发者对于正则表达式的记忆迅速消退,每次遇到新的问题,都要差资料,重新唤回记忆,对于稍微复杂一点的问题,只好求助于现成的解决方案。为了高效的正确的解决实际问题,有的时候甚至要求深入理解正则表达式的原理,甚至对于如何实现正则表达式引擎都要有所了解,规避陷阱,优化设计,提高程序执行效率。

系统学习regualr expression 并不是意见容易的事情,仅仅通过阅读一些How to的快餐式文章是不行的。 所以大家都会推荐这本书Jeffrey Friedl的《master regualr expression 》


1  看完一本技术书籍需要多长时间?译者《精通正则表达式》,看完这本书大概花了一周的业余时间,之后如拨云见日

2 宿主语言(Perl Java VB.Net) 提供了外围的处理支持,但是真正的能力来自正则表达式。

3 完整Regular Expression由两种字符构成。特殊字符(special characters)称为“元字符” (metacharacters)其他为文字(literal)

4  ^ 代表一行的开始
   $代表结束
   正则表达式结构体(construct) gr[ea]y 表达的是grey  gray
   字符组元字符(character-class metacharacter) ‘-’表示一个范围 <H[1-6]>  与 <H[123456]> 是完全一样的。
   [0-9A-Z_!.?] 能够匹配一个数字、大写字母、下划线、感叹号、点号或者问号
   [^] 排除型字符  排除型字符组表示匹配一个未列出的字符(match a charater that's not listed)而不是 “不要匹配列出的字符(don't match what is listed)”
  
   ^cat$  只包含cat的行
   ^$     空行
   . 用来匹配任意字符的字符组的简便写法

5 正则表达式的一个重要的问题是:写正则表达式的时候,我们需要在对欲检索文本的了解程度与检索精确性之间求得平衡。

6  | 表示多分支的或 (alternative)
   对于表达式gr(a|e)y 来说,括号是必须的!
   Jeffrey|Jeffery     Jeff(rey|ery)    Jeff(re|er)y 等价
  
7 忽略大小写使用的是-i命令

8 单词分界符 \<   \> 这个是单词版本的^ $

9 元字符?代表可选项,把它加在一个字符的后面,就表示此处容许出现这个字符,不过它的出现并非匹配成功的必要条件。

界定?的作用对象是括号的主要用途之一
 
+ 表示之前紧邻的元素出现一次或多次
* 表示之前紧邻的元素出现任意次
?*+ 统称为量词(quantifiers) 因为他们限制了所作用元素的匹配次数
 
interval quantifier区间量词,能够使用元字符来定义重现次数的区间{min,max}
 
 
10 转义字符 escape
   \([a-zA-Z]+\) 来匹配一个括号内的单词,比如(very)
  
11 任何语言中都存在不同的方言和口音,很不幸,正则表达式也一样。众多正则表达式的流派(flavor)

flavor 这个词真是用的巧啊!!

12 编写正则表达式的时候,按照预期获得成功的匹配要花去一般的功夫,另一半的功夫用来考虑如何忽略那些不符合要求的文本。

13   "[^"]*"  用来匹配引号内的字符串

在深入了解如何调校正则表达式之后,读者会明白,想要在复杂性和完整性之间求得平衡,一个重要的因素是了解待搜索的文本。

14  (1[012]|[1-9]):[0-5][0-9](am|pm)  来匹配 9:17am   12:30pm

15 metacharacter  metasequence 表达的是元字符,很可惜,又是flavor不同。。。

16 一个正则表达式的效率由于其他表达式的原因所在,而且你将能够在复杂性效率和匹配准确性之间进行取舍权衡

17 实际上,正则表达式引擎(regualr expression engine)不同,工作原理也不同,所以对于同样的正则表达式,不同的程序会得到不同的结果。

18 Page 32 给出了egrep中metacharacter的总结!还是不错的!

19  在第一章的最后,有这样一段,算是共勉吧!
It might take some time to become acclimated to regualr expression,so until you get a real taste of the excitement by using them to solve your problems,it might all feel just a bit too academic.If so,I hope you will resist the desire to play rummy.Once you understand the power that regualr expressions provide,the small amount of work spent learning them will feel trivial indeed!

 

心血来潮,补补基础,做一下笔记。慢慢看,这个也不着急,大概需要一个月的时间。。

posted on 2011-07-03 22:22 Sosi 阅读(504) 评论(1)  编辑 收藏 引用

评论

# re: Master regular expression Chapter1 2011-07-26 16:23 他她女鞋

还真不是很了解。
  回复  更多评论    

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


统计系统