作者:empty 页数:336 出版社:empty |
本书针对作者在开发中遇到的实际问题,以及其他开发人员咨询的问题,总结出一套用正爱事凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联质量投诉请发邮件至zlts@phei.com.cn,盗版侵权举报请发邮件到dbqq@phei.com.cn。正则表达式这个名字看起来总有点古怪,概念似乎也不简单,甚至需要用一整本书来讲解;身为技术人员,我相信你总会与字符串打交道,相应地,各种语言也都提供了与字符串有关2.判断字符串str是否电话号码(为简单起见, 现在只考虑固定电话号码, 也就是长度在7~8任务本身并没有增加太多,但是程序复杂了很多倍;如果你不这样看,那么,来个更复杂的。最直观的办法是, 在字符串中的每个位置截取7~8个字符, 调用之前的is Phone Num() 。这么当然, 很容易就可以做点改进, 只在“当前字符为数字字符”的情况下调用is Phone Num() 。达式解题的办法,并通过具体的例子指导读者拆解、分析问题。全书分为三大部分:第一部分主要讲解正则表达式的基础知识,涵盖了常见正则表达式中的各种功能和结构:第二部分主要讲解关乎表达式的更深入的知识,详细探讨了编码问题、匹配原理、解题思路:第三部分将之前介绍的各种知识落实到6种常用语言.NET、Java、JavaScript、PHP、Python、Ruby中, 不但详细介绍了语言中正则表达式的用法,更点明了版本之间的细微差异,既可以作为专门学习的教材,也可以作为有用的参考手册。
本书适合经常需要进行文本处理(比如日志分析或网络运维)的技术人员、熟悉常用开发语言的程序员,以及已经对正则表达式有一定了解的读者阅读。
不妨先看看下面几个问题, 字符串函数是如何解决的(下面的代码使用Python语言,它很直观, 正文里有基础的介绍。现在, 你只需要知道def是定义函数的关键词即可) 。这样效率倒是改进了,但是还有问题没有解决:要求找到的是长度大于等于7个字符,小于等于8个字符的“数字字符串”,而不是“子字符串”——也就是说,假如数字字符串是64240000,需要将它找出来;如果数字字符串是13800138000,则需要忽略它,以及其中的任何子串(比
第一次接触正则表达式, 是2000年我在西安一家公司使用Perl做网站开发时。之前我在工作中只使用过标准的C语言, Perl这门编程语言的强大表达能力, 令我印象极为深刻。Perl的力量,除了语言本身的设计之外,很大程度上来自于它对正则表达式的完美支持。当时我们开发了一个网上商城的应用,允许很多商家在这里开店,可以选择一些不同的样式模板。我很快发现,使用Perl+正则表达式是开发这类应用的利器。我们只花了大约一个月的时间, 就完成了网站核心功能的开发。那时候我意识到,使用正则表达式是聪明人写程序的方法(没说我是聪明人,但是我非常希望与那些聪明人为伍),可以极大地提高代码的重用度和执行效率。如果完全不使用正则表达式,代码量会增加数倍甚至十倍。编程语言。我发现这些语言对于正则表达式的支持, 没有一个能够超越Perl。Java这种所谓的“工业主流编程语言”, 一直到2002年JDK 1.4推出时, 才正式把对正则表达式的支持加入到核心类库。因为长期缺乏对正则表达式的原生支持, 以及语言本身表达能力欠缺, 使用Java来做大量的文本处理, 感觉非常笨拙, 完全没有使用Perl那种指哪打哪的快感。直到2007年我发现了另一个更好的Perl语言——Ruby, 才重新找回了2000年Perl带给我的编程快感。打交道上。在这里并没有很高深的算法,只有大量繁重的文本处理。难以想象,如果没有正则表达式,我们的开发将会是何等原始。也是正则表达式大显身手的地方。无论使用稍显简陋的sed/awk还是更高级的Perl/Python/Ruby,后来因为一些原因, 我告别了Perl。在之后的工作中, 我使用过Java、JavaScript、Ruby等因为我的工作主要是做Web开发, 大量的时间花在与HTML/CSS/JavaScript以及关系数据库除了Web开发领域, 需要实现大量自动化功能的一些领域, 例如运维领域和自动化测试领域,实现自动化功能,都必须依赖大量的正则表达式。的UML来解决一切编程问题。但是我一直认为面向对象只解决了软件开发的一小部分问题, 而且是宏观方面的问题。正则表达式解决的问题,是面向对象无能为力的一些微观方面的问题。在这里不需要坐而论道的方法论争论,需要的是刺刀见红的肉搏战。这些问题即使使用完全面向对象的方式能够解决,也会是很笨拙的。如果用物理学米比喻,面向对象是“广义相对论”,而正自从面向对象时髦起来之后, 甚至一度出现了面向对象万能论, 有人试图用MDA和可执行则表达式则是“量子力学”。正则表达式已经成为了现代编程语言的基础模块,现在很难找到一种不支持正则表达式的编程语言。除了编程语言外, 在很多工具软件, 例如文本编辑器(Vi、Emacs、UltraEdit) 、Web服零务器(Apache、Ng in x) 之中都能找到正则表达式的身影。余晟老师是我的朋友,我对他印象最为深刻的是他对于技术工作的严谨态度。“格物致知”是中国传统儒家学派所追求的一种道德修养,也是一种境界。余老师是我的朋友中最接近“格物致知”这种境界的一位。我虽然从未精通过任何一门技术,但是很喜欢结交余老师这样的朋友。余老师潜心编著的这本《正则指引》深入浅出,将正则表达式的由来和分支娓娓道来。阅读这本书, 我仿佛回到了11年前做Perl程序员时的快乐时光。国内很多程序员的一个通病是好高骛远,像《正则指引》这样一本详细讲解基础知识的书未必会有很好的销路。但是等你做过很多年开发之后,你会发现,对你最有价值的,正是这些基础知识和工具。软件开发的“道”,正是隐藏在这些看起来不起眼的基础知识和工具之中的。返璞归真——评(正则指引)
提到正则表达式,许多人很有点不屑一顾:这东西,不登大雅之堂,再说也不是总要用到,何必专门花时间学习?没错,正则表达式并不“总要用到”,但到了需要的场合用不上,往往产生“一分钱难倒英雄汉”的尴尬。经常需要处理文本的程序员自然会知道正则表达式的价值,其他的程序员如果不会正则表达式,即便开发的领域与文本处理没什么关系,也难免“躺着中枪”的命运——前几天我遇到一个问题, 将一行长长的地址拆分成多行, 负责这部分的程序员的日常工作只是制作PDF而已,拆分地址是很“边缘”的功能,但不会正则表达式就无法准确折行(一般需要在标点符号出现的地方折行,而不能只在空白字符处折行,但是不同语言中的标点符号各有不同),结果一筹莫展;相反,如果了解正则表达式,就可以很容易地处理各种语言中的标点字符。的关于正则表达式的书籍和资料有不少,但又各有不足。这类资料的好处是简单直接,查到了,如果有现成的例子,而且适用于自己的语言,则可以直接拿来用;然而,其坏处也是简单直接,因为缺乏背后原理的讲解,如果找不到现成的例子,或者找不到能在自己所使用语言中行得通的例子(需知道,同样的正则表达式并不能直接套用到不同的语言中),则束手无策。尤其是前者,堪称关于正则表达式的经典著作,如果想认真学习正则表达式,这类书籍是必须阅读的。但这类书籍也有一个弱点,即都是由英文版本翻译而来的,更多地侧重英文文本的处理,身为中文世界的开发人员,我们经常需要处理中文文本——对于处理英文之外的字符,正则表达式已经提供了足够丰富的功能,但如何用对、用好这些功能,资料却很匮乏。以我的开发经验来看,专门花点时间掌握正则表达式,确实是非常有必要的。目前可以见到在互联网上,流传着一些编程语言的正则文档和《30分钟教会你正则表达式》之类的帖子。在正式的出版领域,已经有《精通正则表达式》、《正则表达式必知必会》之类的书籍出版,我经常需要给人讲解正则表达式的相关知识,时常惋惜的是,开发人员为这些问题所困扰:正因为如此,本书的写作动机便是着力弥补现有资料的缺陷。相对于正则文档和速成教学帖子,本书深入讲解了匹配背后的原理,往往会举一反三,告诉读者,这里为何这样写,如果改成其他形式,会造成什么结构:并且,集中讲解和比较了多种语言中正则表达式用法的异同,方便读者把现成的正则表达式“移植”到自己的工作环境中秀爱者如何设定编码, 如何正确处理中文等字符。另外, 本书还涵盖了.NET、Java、Java Scrip r、PHP、
相对于《精通正则表达式》等正式的书籍,本书辟出专门的内容讲解语言和编码,告诉读Python、Ruby六种常用语言, 对每种语言给出专门章节, 不但详细介绍了语言中正则表达式的用法,更点明了版本之间的细微差异,不但可以作为专门学习的教材,还可以成为有用的参考手册。