具体描述
《正则指引》针对作者在开发中遇到的实际问题,以及其他开发人员咨询的问题,总结出一套使用正则表达式解题的办法,并通过具体的例子指导读者拆解、分析问题。全书分为三大部分:第一部分主要讲解正则表达式的基础知识,涵盖了常见正则表达式中的各种功能和结构;第二部分主要讲解关于正则表达式的更深入的知识,详细探讨了编码问题、匹配原理、解题思路;第三部分将之前介绍的各种知识落实到6种常用语言.NET、Java、JavaScript、PHP、Python、Ruby中,不但详细介绍了语言中正则表达式的用法,更点明了版本之间的细微差异,既可以作为专门学习的教材,也可以作为有用的参考手册。
本书适合经常需要进行文本处理(比如日志分析或网络运维)的技术人员、熟悉常用开发语言的程序员,以及已经对正则表达式有一定了解的读者阅读。
作者简介
余晟,毕业于计算机系,副修中文,非正统型技术爱好者。曾任抓虾网、银杏泰克主力程序员,盛大创新院高级研究员,现任华南某电商公司技术部总监。坚信计算机可以无限延伸人的能力,前提是人必须理解计算机的逻辑,所以对任何技术都不应该浅尝辄止,仅仅满足于“会用”。
已经翻译出版《精通正则表达式(第3版)》和《技术领导之路》,审阅《软件架构师应该知道的97件事》和《REST in Practice中文版》。
目录信息
第1章 字符组
1.1 普通字符组
1.2 关于Python的基础知识
1.3 普通字符组(续)
1.4 元字符与转义
1.5 排除型字符组
1.6 字符组简记法
1.7 字符组运算
1.8 POSIX字符组
第2章 量词
2.1 一般形式
2.2 常用量词
2.3 数据提取
2.4 点号
2.5 滥用点号的问题
2.6 忽略优先量词
2.7 转义
第3章 括号
3.1 分组
3.2 多选结构
3.3 引用分组
3.3.1 反向引用
3.3.2 各种引用的记法
3.3.3 命名分组
3.4 非捕获分组
3.5 补充
3.5.1 转义
3.5.2 URL Rewrite
3.5.3 一个例子
第4章 断言
4.1 单词边界
4.2 行起始/结束位置
4.3 环视
4.4 补充
4.4.1 环视的价值
4.4.2 环视与分组编号
4.4.3 环视的支持程度
4.4.4 环视的组合
4.4.5 断言和反向引用之间的关系
第5章 匹配模式
5.1 不区分大小写模式
5.1.1 模式的指定方式
5.2 单行模式
5.3 多行模式
5.4 注释模式
5.5 补充
5.5.1 更多的模式
5.5.2 修饰符的作用范围
5.5.3 失效修饰符
5.5.4 模式与反向引用
5.5.5 冲突策略
5.5.6 哪种方式更好
第6章 其他
6.1 转义
6.1.1 字符串转义与正则转义
6.1.2 元字符的转义
6.1.3 彻底消除元字符的特殊含义
6.1.4 字符组中的转义
6.2 正则表达式的处理形式
6.2.1 函数式处理
6.2.2 面向对象式处理
6.2.3 比较
6.2.4 线程安全性
6.3 表达式中的优先级
第二部 分
第7章 Unicode
7.1 关于编码
7.2 推荐使用Unicode编码
7.3 Unicode匹配规则
7.4 单词边界
7.5 码值
7.6 Unicode属性
7.6.1 Unicode Property
7.6.2 Unicode Block
7.6.3 Unicode Script
7.7 Unicode属性列表
7.7.1 Unicode Property
7.7.2 Unicode Block
7.7.3 Unicode Script
7.8 POSIX字符组
第8章 匹配原理
8.1 有穷自动机
8.2 正则表达式的匹配过程
8.3 回溯
8.4 NFA和DFA
第9章 常见问题的解决思路
9.1 关于元素的三种逻辑
9.1.1 必须出现
9.1.2 可能出现
9.1.3 不能出现
9.2 正则表达式的常见操作
9.2.1 提取
9.2.2 验证
9.2.3 替换
9.2.4 切分
9.3 正则表达式的优化建议
9.3.1 使用缓存
9.3.2 尽量准确地表达意图
9.3.3 避免重复匹配
9.3.4 独立出文本和锚点
9.4 别过分依赖正则表达式
9.4.1 彻底放弃字符串操作
9.4.2 思维定势
9.4.3 正则表达式可以匹配各种文本
第三部 分
第10章 .NET
10.1 预备知识
10.2 正则功能详解
10.2.1 列表
10.2.2 字符组
10.2.3 Unicode属性
10.2.4 字符组简记法
10.2.5 单词边界
10.2.6 行起始/结束位置
10.2.7 环视
10.2.8 匹配模式
10.2.9 捕获分组的引用
10.3 正则API简介
10.3.1 Regex
10.3.2 Match
10.4 常用操作示例
10.4.1 验证
10.4.2 提取
10.4.3 替换
10.4.4 切分
第11章 Java
11.1 预备知识
11.2 正则功能详解
11.2.1 列表
11.2.2 字符组
11.2.3 Unicode属性
11.2.4 字符组简记法
11.2.5 单词边界
11.2.6 行起始/结束位置
11.2.7 环视
11.2.8 匹配模式
11.2.9 纯文本模式
11.2.10 捕获分组的引用
11.3 正则API简介
11.3.1 Pattern
11.3.2 Matcher
11.3.3 String
11.4 常用操作示例
11.4.1 验证
11.4.2 提取
11.4.3 替换
11.4.4 切分
第12章 JavaScript
12.1 预备知识
12.2 正则功能详解
12.2.1 列表
12.2.2 字符组
12.2.3 字符组简记法
12.2.4 单词边界
12.2.5 行起始/结束位置
12.2.6 环视
12.2.7 匹配模式
12.2.8 捕获分组的引用
12.3 正则API简介
12.3.1 RegExp
12.3.2 String
12.4 常用操作示例
12.4.1 验证
12.4.2 提取
12.4.3 替换
12.4.4 切分
12.5 关于ActionScript
12.5.1 RegExp
12.5.2 匹配规则
12.5.3 匹配模式
12.5.4 正则API
第13章 PHP
13.1 预备知识
13.2 正则功能详解
13.2.1 列表
13.2.2 字符组
13.2.3 Unicode属性
13.2.4 字符组简记法
13.2.5 单词边界
13.2.6 行起始/结束位置
13.2.7 环视
13.2.8 匹配模式
13.2.9 纯文本模式
13.2.10 捕获分组的引用
13.3 正则API简介
13.3.1 PREG 常量说明
13.3.2 preg_quote
13.3.3 preg_ grep
13.3.4 preg_match
13.3.5 preg_match_all
13.3.6 preg_ last_ error
13.3.7 preg_replace
13.3.8 preg_ replace_ callback
13.3.9 preg_ filter
13.3.10 preg_ split
13.4 常见的正则操作举例
13.4.1 验证
13.4.2 提取
13.4.3 替换
13.4.4 切分
第14章 Python
14.1 预备知识
14.2 正则功能详解
14.2.1 列表
14.2.2 字符组
14.2.3 Unicode属性
14.2.4 字符组简记法
14.2.5 单词边界
14.2.6 行起始/结束位置
14.2.7 环视
14.2.8 匹配模式
14.2.9 捕获分组的引用
14.3 正则API简介
14.3.1 RegexObject
14.3.2 re.compile(regex[, flags])
14.3.3 re.search(pattern, string[, flags])
14.3.4 MatchObject
14.3.5 re.match(pattern, string[, flags])
14.3.6 re.findall(pattern, sting[, flags])
14.3.7 re.finditer(pattern, string[, flags])
14.3.8 re.split(pattern, string[, maxsplit=0, flags=0])
14.3.9 re.sub(pattern, repl, string[, count, flags])
14.4 常用操作示例
14.4.1 验证
14.4.2 提取
14.4.3 替换
14.4.4 切分
第15章 Ruby
15.1 预备知识
15.2 正则功能详解
15.2.1 列表
15.2.2 字符组
15.2.3 Unicode属性
15.2.4 字符组简记法
15.2.5 单词边界
15.2.6 行起始/结束位置
15.2.7 环视
15.2.8 匹配模式
15.2.9 捕获分组的引用
15.3 正则API简介
15.3.1 Regexp
15.3.2 Regexp.match(text)
15.3.3 Regexp.quote(text)和Regexp.escape(text)
15.3.4 String.index(Regexp)
15.3.5 String.scan(Regexp)
15.3.6 String.slice(Regexp)
15.3.7 String.split(Regexp)
15.3.8 String.sub(Regexp, Str)
15.3.9 String.gsub(Regexp, String)
15.4 常用操作示例
15.4.1 验证
15.4.2 提取
15.4.3 替换
15.4.4 切分
15.5 Ruby 1.9的新变化
第16章 Linux/UNIX
16.1 POSIX
16.1.1 POSIX规范
16.1.2 POSIX字符组
16.2 vi
16.2.1 字符组及简记法
16.2.2 量词
16.2.3 多选结构和捕获分组
16.2.4 环视
16.2.5 锚点和单词边界
16.2.6 替换操作的特殊字符
16.2.7 replacement中的特殊变量
16.2.8 补充
16.3 grep
16.3.1 基本用法
16.3.2 字符组
16.3.3 锚点和单词边界
16.3.4 量词
16.3.5 多选结构和捕获分组
16.3.6 options
16.3.7 egrep和fgrep
16.3.8 补充
16.4 awk
16.4.1 基本用法
16.4.2 字符组及简记法
16.4.3 锚点和单词边界
16.4.4 量词
16.4.5 多选结构
16.4.6 补充
16.5 sed
16.5.1 基本用法
16.5.2 字符组及简记法
16.5.3 锚点和单词边界
16.5.4 量词
16.5.5 多选结构和捕获分组
16.5.6 options
16.5.7 补充
16.6 总结
附录A 常用语言中正则特性一览
附录B 常用的正则表达式
附录C 常用的正则表达式工具及资源
· · · · · · (收起)
读后感
不得不承认这是一本不错的“指引”,内容实用。 不足之处有: 1. 知识点的层次不够清晰,部分原因是排版导致的,内容被例子和图片分割得支离破碎; 2. 感觉作者有点“卖弄”文采,描述有点啰嗦,还有一些简直就是废话,阅读起来有点费劲(也有可能是自己的阅读水平及其低下导致...
不得不承认这是一本不错的“指引”,内容实用。 不足之处有: 1. 知识点的层次不够清晰,部分原因是排版导致的,内容被例子和图片分割得支离破碎; 2. 感觉作者有点“卖弄”文采,描述有点啰嗦,还有一些简直就是废话,阅读起来有点费劲(也有可能是自己的阅读水平及其低下导致...
第110页注1:“...同一种unicode字符在不同的编码中有不同的码值。” —— 一个unicode字符的code point是一个抽象的整数值,这个值是固定不变的。只将这个值按照不同的编码方式映射到低层的若干字节(octet strings)的时候,这一串octet的值会依据编码方式的不同而不同(char...
非常好的一本讲解正则基础的书,在阅读《精通正则表达式》之前应该先好好读读这本书(恰巧作者也是该书的译者) ,全书围绕正则表达式各个特性的基础知识和正则表达式执行的基本原理进行全面的解读。与此同时对正则表达式在各个语言和平台(Python/.NET/Java/Ruby/JavaScript/PHP/...
本书非常优秀,作者是多年的正则表达式玩家,对正则表达式深入浅出的介绍掌握得非常有分寸。纵有些许瑕疵但是着实值得向新人或者刚接触正则表达式不久的人推荐,也可以作为《精通正则表达式(第三版)》的前置读物。 私心提一句,对于正则表达式这个领域,实际上绝大多数的语言...
用户评价
坦白说,在读《正则指引》之前,我对正则表达式的理解,用“一知半解”来形容都不为过。我通常能用它来做一些最基本的匹配,但遇到复杂一点的需求,就束手无策了。这本书就像一座灯塔,为我指明了方向。我最欣赏的是它那种“润物细无声”的教学方式,没有一开始就抛出大量的术语和复杂的公式,而是从最基础的字符匹配开始,一步步地引导读者进入正则表达式的世界。书中的例子非常接地气,很多都是我在日常工作中会遇到的实际场景,比如从网页源码中提取特定信息,或者分析日志文件,这些都让我觉得这本书的内容非常实用。 书中对于“捕获组”、“非捕获组”的讲解,以及如何利用它们进行分组匹配和提取,对我来说是最大的收获。以前我总是觉得很困惑,为什么有时候会多匹配一些我不想要的内容,或者无法准确地提取我需要的信息。《正则指引》用非常清晰的图示和代码解释,让我彻底明白了其中的原理,并且能够灵活运用。而且,书中还对正则表达式的性能进行了深入的分析,这让我意识到,编写一个能够运行的表达式和编写一个高效、优化的表达式之间,存在着很大的差别。读完这本书,我感觉自己不仅学会了如何使用正则表达式,更重要的是,我学会了如何“思考”正则表达式,如何根据具体场景选择最合适、最优雅的解决方案。
读完《正则指引》这本书,我感觉自己仿佛踏上了一段全新的数字探索之旅,尤其是在文字处理和信息提取的领域,这本书简直是我的启蒙导师。我一直以来都对编程语言和各种技术性书籍抱有浓厚的兴趣,但很多时候,它们要么过于晦涩难懂,要么就是过于理论化,脱离实际应用。然而,《正则指引》完全打破了我的这种刻板印象。它以一种极其清晰、循序渐进的方式,将那些看似神秘的正则表达式概念一一剖析开来。书中的例子非常贴切,覆盖了从简单的字符匹配到复杂的模式识别,每一步都伴随着详细的解释和实际的应用场景,这让我能够立刻理解这些概念的价值和作用。 我尤其喜欢书中对于“贪婪匹配”和“懒惰匹配”的讲解,这常常是许多新手在理解正则表达式时遇到的一个难点。作者通过生动的比喻和精心设计的代码片段,让我茅塞顿开,并且能够清晰地区分它们在使用场景上的差异。更重要的是,这本书不仅仅是教我“如何用”,更在于“为何要这样用”。它深入浅出地解释了正则表达式背后的逻辑和设计理念,让我不仅仅是在模仿,而是在真正地理解和掌握这项技能。这种深入骨髓的理解,使得我在后续的实际工作中,面对各种文本处理的挑战时,能够更加自信和从容,能够根据具体需求灵活运用正则表达式,而不再是生搬硬套。
《正则指引》这本书,我真的要用“相见恨晚”来形容。我是在一次偶然的机会下,因为工作需要处理大量文本数据,才接触到这本书的。之前我对正则表达式的印象,停留在“一种很奇怪的符号组合,能匹配文字”这个层面,觉得它晦涩难懂,望而却步。然而,《正则指引》彻底颠覆了我的认知。它就像一位耐心又博学的向导,一步步地带领我穿越迷雾。我原本以为会遇到很多枯燥的理论,但书中充满了实际案例,每一个案例都极具代表性,从网页抓取到日志分析,再到数据清洗,让我看到了正则表达式在真实世界中的强大应用。 书中的讲解方式非常巧妙,它不直接抛出复杂的概念,而是从最基础的字符匹配开始,逐步引入“元字符”、“量词”、“分组”、“断言”等核心概念。我特别欣赏作者在讲解每一个新概念时,都会提供多个角度的解释,并且配以不同复杂度的实例,确保我能够真正理解其原理。而且,它不像很多技术书籍那样,看完之后感觉自己好像懂了,但实际动手时却无从下手。《正则指引》的练习题设计得非常到位,循序渐进,而且答案的解析也十分详尽,让我能够通过实践来巩固和加深理解。读完之后,我感觉自己已经能够自信地去构建更复杂的正则表达式,解决更棘手的文本处理问题了。
《正则指引》这本书,对我来说,与其说是一本技术书籍,不如说是一门艺术的启蒙。我一直认为,正则表达式是一种非常抽象且难以掌握的语言,但这本书的出现,彻底改变了我的看法。作者仿佛是一位技艺精湛的艺术家,他用最简洁、最富有表现力的笔触,将正则表达式的精髓展现得淋漓尽致。书中的文字流畅而富有逻辑,即使是对于正则表达式初学者,也能够轻松理解。我特别喜欢书中的案例分析,每一个案例都围绕着一个核心概念展开,并且层层递进,让我能够循序渐进地掌握每一个知识点。 书中的讲解方式非常注重理论与实践的结合。在每一个概念讲解完毕后,都会紧跟着相应的代码示例,并且对代码的每一个部分都做了详细的解释,这使得我不仅能够理解概念本身,还能将其转化为实际的应用。我印象最深刻的是,书中对于“性能优化”的讲解,这一点很多入门级的书籍都会忽略,而《正则指引》却给予了充分的重视,让我了解到如何写出既准确又高效的正则表达式。读完这本书,我感觉自己仿佛拥有了一双“慧眼”,能够洞察文本数据的内在结构,并且能够用一种更加精妙的方式来操纵它们。
如果说之前我对正则表达式的认识是“雾里看花”,那么读完《正则指引》之后,我感觉自己已经“拨开云雾见月明”了。这本书的独特之处在于,它并没有仅仅停留在介绍正则表达式的语法和各种功能,而是深入挖掘了其背后精妙的逻辑和设计思想。作者用一种非常接地气的方式,将那些看似复杂的概念,例如回溯、前瞻、捕获组等,解释得清晰易懂。我印象最深刻的是书中关于“匹配效率”和“性能优化”的章节,这在很多入门级别的正则表达式教程中是很难看到的,它让我意识到,写出能工作的正则表达式固然重要,但写出高效、易于维护的正则表达式则更具挑战性和价值。 书中大量的实际应用场景分析,让我深刻体会到正则表达式的强大生命力。从简单的字符串查找、替换,到复杂的文本解析、数据提取,再到各种编程语言中的具体实现,这本书都给出了详实的指导。我特别喜欢作者在讲解过程中,常常会引入一些“陷阱”和“常见误区”,并一一给出解决方案,这极大地帮助我避免了很多不必要的弯路。读这本书的过程,与其说是在学习一项技术,不如说是在培养一种解决问题的思维方式。它教会我如何拆解复杂问题,如何用更优雅、更高效的方式来处理文本数据。
竟然没有讲perl,实在说不过去。
浙江图书馆
参考过
为什么一本将正则得书里,除了前言,竟然闭口不提PERL。。奇葩一枚!
竟然没有讲perl,实在说不过去。