上一章,我们通过Word中的“使用通配符”模式,粗略见识了正则表达式的使用方法。然而通配符并不等于正则表达式,遇到复杂的情况,通配符就力不从心了。所以从本章开始,我们来看“正宗”的正则表达式。 安装Regular Expression Tester “工欲善其事,必先利其器”,学习正则表达式也是如此。尽管正则表达式的思想和规则是基本确定的,应用起来却有许多讲究(比如,在Java、C++、Python等不同的编程语言中,同一个表达式的具体写法是不同的,在Word、Excel等软件中也是这样)。所以,学习正则表达式最好采用“中立而规范”的工具——这有点像学习摄影,开始应该学习的是构图、用光,而不是尼康、佳能或索尼相机的特性。 本书中,我们采用Firefox的插件Regular Expression Tester(意思是“正则表达式测试工具”)来学习和讲解正则表达式,选择它的好处在于:不需要搭建编程语言环境(许多时候我们并不需要在编程语言中应用正则表达式);在Windows/Unix/Mac上都可以使用;并且支持大多数通用的正则表达式功能。如果你没有接触过它,也不用担心,下面我们介绍它的安装和使用。 (more…)
第一章:通配符 我们已经说过,这本《正则表达式傻瓜书》并非把读者当傻瓜,而是保证“傻瓜都能看懂”。如果你到现在还没听说过“通配符”或是“正则表达式”,那么,请看这一章。 要说明的另一点是,因为一般的Linux/Unix用户都熟悉通配符,所以,本章假设读者工作于Windows平台下,所举的例子也全部面向Windows平台。 从Windows的搜索谈起 正则表达式是进行文本处理的工具。那么,它到底进行哪些“处理”?简而言之,正则表达式的主要功能就是对文本进行查找(匹配)和替换(修改)。在这一章里,我们先从最简单的文本查找说起。 正则表达式所“搜索/查找”功能的对象,就是我们说的“文本”——它可以是Word文档、Excel表格、浏览器看到的网页等等,也可以是文件名(工作日报20090925.doc)、电话号码(400-82055555)、电子邮件地址(somebody@someone.net)等等。所以也有这样一种说法:正则表达式处理的是“字符串”——也就是一系列的字符。想想也是,Word文档的内容、Excel表格的内容、网页的内容、文件名、电话号码、电子邮件等等,无非都是“连接起来”的字符,也就是“字符串”了。 几乎每种文本处理工具(Word、Excel、记事本、写字板)都提供了查找(和替换)功能: 图1-1 Word中的查找 (more…)
按:《精通正则表达式》是一本好书,我翻译之后,一直都奢望写本关于正则表达式的书,为《精通正则表达式》接上地气,今年终于有机会把“奢望”变成“苦差”。下面是本书(暂定名《正则表达式傻瓜书》,大家对此有意见或建议也请直说)的前言,其中介绍了本书的结构、读者和价值,请大家多提建议,在这里先行谢过。 前言 正则表达式简介 “正则表达式”,这个名字看起来有点古怪。不过别着急,我们先看看它到底是有什么用,再解释这古怪名字的来历。 简而言之,正则表达式就是一套专门处理文本的强大工具。“学术”地说,它能够做的事情主要是: 复杂的文本查找/匹配/提取 复杂的文本替换 请注意,这里说的是“复杂”的操作,而不是“简单”的查找/匹配/提取/替换(几乎任何一种文本处理工具,例如Word和记事本,都提供了这种功能)。或者,通俗地说,正则表达式能够做的事情是这样的: 如果你是一般用户: 把多行的文本迅速拼成用逗号分隔的一行文本(群发邮件时这非常有用); 把一长篇文章里的手机号码都找出来(除了匹配13x、15x、18x开头的号码,还可以处理开头有‘0’和/或有‘+86’的情况); 把一篇文章里可能拼写错的某个单词。比如把separete、saparate、saperete之类“自动纠正”到separate,而且不受大小写限制(seParate, separaTe也可以纠正); 如果你是专业用户: 验证用户输入的手机号、邮件地址是否合法(还记得填写网页表单时常见的提示吗?); 提取网页源代码中的所有图片链接、超链接(搜索引擎就是这么干的); 提取文本中的邮件地址(现在你知道自己的邮件地址怎么被“抓”走了吧?); 进行复杂的格式检查(把各种小数“统一”成精度为0.01的格式,去掉重复的单词); 这样的任务可能并不是我们日常工作的主要内容,“不幸”遇上了却非常烦人——简单重复劳动往往要耗费我们大量的时间。所以,在《卓有成效的程序员》(Neal Ford著,机械工业出版社2009年版)中,作者写道:…