原载:http://blog.csdn.net/netcasper/article/details/368555
已经不记得第一次听说正则表达式是什么时候了,但是计算理论课让我对它有了一定的理解。而真正在实践中用到,还是从半年前开始,接手同事用Perl写的一个测试框架,那时其实一点Perl程序都不会写,就这样一点一点学起来,后来发现写Perl程序就是在构造一个个正则表达式,把字符串分解,然后再重新组合。
相对于编译器和emacs来说,我接触正则表达式的时间更短,而且相对于前两者来说,后者的资料更难找,所以学起来也更困难。后来听同事说有本《Mastering Regular Expression》,已经出到第二版了,不过国内没有卖的,正好他当时要去美国出差,就托他帮我带一本回来。拿到书时我感到很惊讶,在我看来概念简洁的正则表达式居然要用这么厚(496页)的一本书来讲解。书中的一段话解释了我的困惑,原来,实践中的正则表达式是基于理论的一种扩展,甚至已经跳出理论的框架,并非正则了。只不过没人为这个新发明的东西命名,仍然叫它正则表达式。由于变种很多,要讲清楚它们之间的相同和不同点,就很不容易。
这是一本相当好的书,将我一点点引入美妙的正则表达式的世界。每当我建立起信心,自以为已经学会了按照正则表达式的方式思考时,作者就会用一个精妙的例子教育我“路还长着呢”!可以说,正则表达式为我打开了一扇门,让我以一个全新的角度看待文本,它们已经不仅仅是一串字符流,而且拥有一定的结构,可以对其进行分解、提取和加工。那种感觉,大概就像在外科医生眼里,病人已经不再浑然一体,而是一个各个组织有机结合形成的系统。学习正则表达式让我明白了,打印信息也是有学问的,要巧妙地设计布局,使得输出信息方便地被正则表达式处理,这样可以使很多工作自动化,减少工作中的负担。
除了Perl之外,还有很多程序支持正则表达式,emacs就是其中一个。在了解正则表达式之前,我几乎没有用过任何涉及到这方面内容的功能,后来才发现,我忽略的,是一座宝藏。
书还没有读完,学习更要继续,今后要多加实践,而且打算在熟练运用的基础上再看几种正则表达式处理引擎的程序,加深理解。