Categories: 在线文档

《正则指引》前言

本文由Yurii原创,转载请注明来源: Life Sailor

本文链接 《正则指引》前言


 

前言

提到正则表达式,许多人很有点不屑一顾:这东西,不登大雅之堂,再说也不是总要用到,何必专门花时间学习?

没错,正则表达式并不是“总要用到”,但到了需要的场合用不上,往往产生“一分钱难倒英雄汉”的尴尬。经常需要处理文本的程序员自然会知道正则表达式的价值,其它的程序员如果不会正则表达式,即便开发的领域与文本处理没什么关系,也难免“躺着中枪”的命运——前几天我遇到一个问题,将一行长长的地址拆分成多行,负责这部分的程序员日常的工作只是制作PDF而已,拆分地址是很“边缘”的功能,但不会正则表达式就无法准确折行(一般需要在标点符号出现的地方折行,而不能只在空白字符处折行,但是不同语言中的标点符号各有不同),结果一筹莫展;相反,如果了解正则表达式,就可以很容易地处理各种语言中的标点字符。

以我的开发经验来看,专门花点时间掌握正则表达式,确实是非常有必要的。目前可以见到的关于正则表达式的书籍和资料已经有不少,但又各有不足。

在互联网上,流传着一些编程语言的正则文档和《30分钟教会你正则表达式》之类的帖子。这类资料的好处是简单直接,查到了,如果有现成的例子,而且适用于自己的语言,可以直接拿来用;然而,其坏处也是简单直接,因为缺乏背后原理的讲解,如果找不到现成的例子,或者找不到能在自己所使用语言中行得通的例子(须知道,同样的正则表达式并不能直接套用到不同的语言中),则束手无策。

在正式的出版领域,已经有《精通正则表达式》、《正则表达式必知必会》之类的书籍出版,尤其是前者,堪称关于正则表达式的经典著作,如果想认真学习正则表达式,这类书籍是必须阅读的。但是这类书籍也有一个弱点,即它们都是从英文版本翻译而来,更多地侧重英文文本的处理,身为中文世界的开发人员,我们经常需要处理中文文本,对于处理英文之外的字符,正则表达式已经提供了足够丰富的功能,但如何用对、用好这些功能,资料却很匮乏。

我经常需要给人讲解正则表达式的相关知识,时常惋惜的是,开发人员为这些问题所困然;正因为如此,本书的写作动机便是着力弥补现有资料的缺陷。

相对于正则文档和速成教学帖子,它深入讲解了匹配背后的原理,往往会举一反三,告诉读者,这里为何这样写,如果改成其它形式,会造成什么结构;并且,集中讲解和比较了多种语言中正则表达式用法的异同,方便读者把现成的正则表达式“移植”到自己的工作环境中。

相对于《精通正则表达式》等正式的书籍,本书辟出专门的内容讲解语言和编码,告诉读者如何设定编码,如何正确处理中文等字符,另外,本书还涵盖了.NET、Java、JavaScript、PHP、Python、Ruby六种常用语言,对每种语言给出专门章节,不但详细介绍了语言中正则表达式的用法,更点明了版本之间的细微差异,不但可以作为专门学习的教材,还可以成为有用的参考手册。

本书的结构

本书可以分为三大部分。

第一部分主要讲解正则表达式的基础知识,覆盖常见正则表达式中的各种功能和结构。看完前面三章,就可以基本弄明白现在流行的各种正则表达式;尤其如果你之前有一些经验,会觉得阅读起来并不困难。但是我也希望读者不要忽略其它的内容,断言和匹配模式现在已经是正则表达式的“标准配备”了,而且确实可以派上大用场,所以第4章和第5章的内容,即便不是很熟悉,阅读起来可能有一些麻烦,也不应该忽略。最后的第6章,则厘清了正则表达式在使用中的若干疑惑,了解它们,你就可以相对自由地在正则表达式的世界里行走了。

第二部分主要讲解关于正则表达式的更深入的知识,这一部分用三章的内容,详细探讨了编码问题、匹配原理、解题思路。这部分内容更抽象,需要多花一点时间来阅读和理解,但是它们确实可以帮你在正则表达式的世界里登堂入室,脱离“术”的层面,掌握万变不离其宗的“道”。

第三部分的作用是接地气,将之前介绍的各种知识落实到六种常用语言.NET、Java、JavaScript、PHP、Python、Ruby中来。每一章的开头有正则功能列表,其中的功能都对应到前面部分的讲解,这些功能的具体应用实例,以及不同版本之间的差异,则在章节中详细讲解,每一章的最后还给出了常见任务的示例代码,方便日后查询。在最后,第16章简要介绍了正则表达式在Linux下常用工具vi、grep、awk、sed中的使用,并通过一个实际的例子将这几种工具串起来,对比说明了它们适合解决的问题。

在本书的最后提供了用作参考的附录,分为三部分。

第一部分是正则表达式的常用功能在不同语言中的比对,希望能给需要在多种语言中使用正则表达式或者移植正则表达式的读者来说提供一份有用的参考;第二部分给出了若干常见的正则表达式,比如匹配邮政编码、身份证号、手机号、QQ号、电子邮件地址等等,希望能成为常见问题的“速查手册”;最后一部分列出了常用正则表达式的工具和资源,方便大家调试自己的正则表达式,以及继续深入学习。

本书的读者

本书适合以下几类读者。

经常需要进行文本处理(比如日志分析或网络运维)的技术人员。这些读者或许已经熟悉了正则表达式的基本用法,但面对日益复杂化和海量化的数据,阅读本书可以帮助你更准确、更高效地处理文本,提升自己工作的价值。

熟悉常用开发语言的程序员。虽然这些读者不需要专职进行文本处理,但源代码和许多数据其实也是文本,如果不会正则表达式,在偶然遇到处理源代码或文本数据的任务时,往往会产生躺着中枪的无力感。本书第三部分可以帮你迅速找到有关的例子,并落实在自己的编程语言中,当然前两部分也非常有必要,因为它们可以帮你夯实基础。

已经对正则表达式有一定了解的读者。这些读者虽然能用正则表达式解决常见的任务,不一定了解正则表达式的编码问题、匹配原理、解题思路,仔细阅读本书的第二部分,可以深化并完善对正则表达式的理解,而第三部分详细比较了使用正则表达式时各种语言、以及同一种语言中各种版本的差异。所有这一切,应该可以让你对正则表达式的掌握更上层楼。

致谢

一本书的完成,必然离不开众多人的帮忙。

首先需要感谢的是周筠老师和徐定翔、卢鸫翔两位编辑,他们在我写作的最初阶段做了大量细心耐心的工作,完全可以说,没有他们的这些工作,我就不会有写作这本书的念头,或者坚持写完的动力。

然后要感谢的是电子工业出版社的杨福平社长和张月萍编辑,没有他们的关照和辛劳工作,这本书的出版定然会遇到更多的困难。

感谢我的朋友霍炬和韩磊,虽然我之前阅读过《精通正则表达式》,但与翻译和写作结缘,他们给了我莫大的帮助,有了这个契机,才有现在的《正则指引》。尤其值得一提的是霍炬的夫人西乔,精心手绘了这本书的封面,在这里表示诚挚的谢意。

感谢我曾工作过的盛大创新院以及创新院的各位同事(李骏、郝培强、庄表伟、丁宇、许式伟、莫华枫、李道兵、赵劼、樊一鹏、张一宁等),创新院给了大家宽松自由的工作环境,与各位同事的讨论加深了我对正则表达式理解,也为我贡献了许多例子。

感谢张东亮、陆亦斌、孙勇、叶劲峰等各位朋友,愿意拨冗阅读本书的草稿,并提出了大量专业的意见。

感谢何源、陈钢、贺钧、陈驰等读者,试读本书之后提出了大量的宝贵意见,在最后关头打消了我心中的许多忐忑。

在更早之前,我的父母从小就鼓励研究和了解各种科学原理(“玩也要动脑筋”),没有这种思维行为习惯,我很可能浅尝辄止而没有兴趣探究正则表达式背后的图景;此外,在中小学阶段,我的语文老师罗碧玉、郭志鸿、易玺铭培养了我对于文字的兴趣,在大学阶段,东北师范大学文学院的王确老师给了我这个理科生非常多的帮助和指引,在此一并表示感谢,能遇到你们是我的幸运。

最后需要还需要感谢许多为这本书做出过贡献的人,你们的名字我可能暂时无法记起,或者无法一一罗列,但我会在心中存留对你们的谢意。

Yurii

View Comments

  • 到时一定要支持一下,精通正则表达式因为是翻译的缘故原则上我还是入了英文版

  • 同表示祝贺&关注。。。最近正被某些正则问题弄的很头疼~

  • 余老师,祝贺你的大作杀青!不容易啊,码字的艰辛是我们没码过多少字的人很难体会到的,有时候我写一篇一两千字的博客都憋得痛不欲生,所以能写一本书得憋成什么样啊,哈哈。再次祝贺!

  • 恭喜恭喜,同你一样,在一本花费了无数心血的著作完成后,定会生出许多感谢与感慨。btw:我的那本也快面世了。:)

    • 很荣幸,被余晟老师提名感谢了。很惭愧,只是稍微做了点反馈,仍不够尽心。同时,恭祝余晟老师佳作热卖大卖,得到读者的厚爱。期待中...

      PS:您应该是淘宝的褚霸吧。呵呵,应该是高性能运维相关的书吧,同样期待您的佳作。

        • 哈哈,我知道的你的余老师。你从盛大创新院到广州某公司。我说的是yufeng那个留言者。

Share
Published by
Yurii

Recent Posts

再次面临孩子不想去打冰球的问题

之前我写了一篇《坚持了两年之后,小朋友突然不想去打冰球了…》,本来是无心之作,没想到收到了很多留言,我自己也获益不少。 本来,我以为解决了小朋友的问题,此事就这样过去了。没想到的是,暑假过后,冰球训练重开,他又老调重弹:“我不去了,我不想打冰球了……”。 这可叫我如何是好?听到他嘟嘟囔囔说这一切的时候,我心里百感交集。 成年人的生活里总是有忙不完的事情,对应的,也希望一切井井有条、按部就班。因此,这样“意外”的变数,总是第一时间让人心生无奈和烦恼:天哪,怎么会这样呢?为什么会这样呢? 不过,基于之前的经验,借鉴大家的留言,这次我显然更有心理准备一些,起码不会慌乱。 之前我写过,如果父母多阅读一些高质量的育儿专著,有助于把自己的期望水平“降”到合适的程度,就不会那么焦虑甚至抓狂。 (more…)

3 weeks ago

Michael,一个打冰球的好孩子

认识Michael很偶然,但我也很幸运,因为我见证了一个“打冰球的好孩子”的成长。 最早认识Michael是在冰球队的夏季体能训练上。那时候这群孩子还只有六岁左右,每次训练都是家长送来,在旁边观看陪伴,再接回家。但是,我很快发现有个孩子不一样,家长送他来就回家,他靠自己换好全身装备,训练完自己洗澡更衣,再由家长接回去。看起来,他好像完全没有其他孩子那种“害怕独处”的感觉。 于是我问他:“小朋友,你这么勇敢,你叫什么名字呀?” 他说:Michael。 我尝试复述他的名字,好几遍都不成功,因为我总听成“米歇”,最后他耐着性子慢慢说,我仔细听才发现最后还有个音节,嘴要更扁一点,舌头往上垫,才可以念出来,类似“米歇-厄尔”。其实这个名字写出来大家都认识,英文里读作“迈克尔”,无奈德语的发音规则很严格,字母i不会像英文那样有两种读音,结尾的el又一定要发音,所以就成了“米歇-埃尔”。 (more…)

3 weeks ago

冰球训练四年的收获和感悟

偶然刷到一篇文章,说的是“贵族家长”群体给小朋友安排的活动:冰球、马术…… 我有点诧异,原来“冰球”也被贴上了“身份”的标签。想想自家小朋友的情况:赶上打折花了400多欧元买的全套护具,80元买的二手冰球包,每个月60欧元的俱乐部费用……想了想,似乎很难和“贵族”联系起来。 只不过,他已经坚持打冰球到了第四年,我们的生活确实有不小的变化。写下来,既是对自己有个交代,也可以作为“贵族运动”的现身说法。因为在我看来,如果非要说它是“贵族”运动,也只能“贵”在高(时间)投入、高产出而已。细细想来,我们的生活,已经被冰球深深的影响了。 (more…)

1 month ago

亲历德国小学的死亡威胁事件【续】

一 很多人关心,我们父子给M写了道歉信之后,对方是否有回应。 答案是:到目前为止,还没有任何回应。不过比较特殊的是,写完信之后德国小学就开始放秋假,学生不用去学校,既然见不到,也就不可能收到任何回应。 老实说,我觉得对方父母是有点反应过度的。这些年我的一条深刻经验是,如果出现分歧、矛盾,越早、在越低的层面直接面对,就越容易解决。许多小的矛盾之所以越闹越大甚至无法收场,往往都是经过了很多演绎、传话,而没有在一开始就开诚布公地面对。 试想,如果自己的孩子收到写着“我要杀了你”的信件,哪怕一开始很惊慌甚至愤怒,但仔细想一想,毕竟还有很多信息是未知的——比如对方是谁,平时言行如何,为何要写这样的信…… 更好的办法或许是先去直接寻求这些问题的答案,而不是直接把信交给家长委员会,走“公事公办”的路子。 我当然承认,“公事公办”无可厚非,对方家长也有这样的权利——所谓权利,就是“有资格做对方不喜欢的事情,人家还拿你没办法”。既然有这样的权利,就需要尊重。 所以,“严于律己,宽于待人”的确是与人相处的重要法则:我不会选择这么做,但我能理解和尊重你这么做的权利。 也有人问,那将来你遇到M的父母,会不会紧张? 答案是:不会。 (more…)

1 month ago

亲历德国小学的死亡威胁事件

一 收到S老师邮件的时候,我刚刚胆战心惊地做完第一次德语技术分享,还在享受着同事们的鼓励。猛然间就收到一封邮件:“您的孩子在学校参与了一起性质严重的事件,您必须来学校面谈,请从以下时间段中选择……” 什么?“性质严重的事件”?我揉了揉眼睛,确认自己没有看错。再把这段文字贴到谷歌翻译里,确认自己没有理解错。 我没有看错,也没有理解错,就是“性质严重的事件”。好吧,既然“性质严重”,那谈话肯定是越早越好,最早的日期是第三天。我紧赶慢赶,回信确认了最早可能的谈话时间,虽然德国人通常都不期待能这么快收到回复。 去接他回来的路上,我发现他一切正常,完全看不出任何异样。于是,我也没有表现出任何异样,只是依照惯例,问他当天发生了什么,在学校开心不开心。 得到肯定的答复之后,我心生疑惑,看起来和“性质严重”完全不搭边。那会是什么事情呢? 我又问他,有没有和同学吵架、打架,是不是被人欺负了不敢说。但是,答案全都是“没有”。 我满心怀疑,又按捺不住,直接问:“既然一切都挺好,为什么S老师给我发信,说让我来学校跟她谈话呢?”我担心“性质严重”会吓到他,故意隐去了这个词。 他的满面春风在那瞬间凝固了,喃喃低语道:“好吧,原来是那件事,我还以为她不会跟你说。” (more…)

1 month ago

写在加入乐团一周年

在2024年之前,我从来没想过自己有一天还可以加入乐团,甚至参加音乐会演奏。我只是个普通中年人,在之前文章里说过,上世纪八十年代随大流弹了十年手风琴,考过六级(当时最高八级)之后就彻底放弃了。直到二十多年后,在上海工作时才重新开始弹琴,当时有幸跟夏老师学了两年,打开了感官,懂得了音乐的世界远远比考级要广阔和美妙。再往后,就是自己看Youtube学习了一些乐理知识。因为德国几乎每个城市都有很多音乐学校,2023年末,我给本市的音乐学校写信,询问是否可以参加手风琴课程。通过回信我才知道,原来不只是“每个城市都有很多音乐学校”,而且“每个城市都有很多乐团”,哪怕是手风琴乐团。就这样,阴差阳错的,2024年初,经过简单的试奏,我加入了本市的手风琴乐团。虽然我是乐团新人,仍然有很多要学习的,但是一年下来,确实有不少感受。如果读者朋友也对音乐感兴趣,或者想让孩子学习音乐,也许我的感受可以提供一些参考。 (more…)

1 month ago