本书针对作者在开发中遇到的实际问题,以及其他开发人员咨询的问题,总结出一套使用正则表达式解题的办法,并通过具体的例子指导读者拆解、分析问题。全书分为三大部分:第一部分主要讲解正则表达式的基础知识,涵盖了常见正则表达式中的各种功能和结构;第二部分主要讲解关于正则表达式的更深入的知识,详细探讨了编码问题、匹配原理、解题思路;第三部分将之前介绍的各种知识落实到6种常用语言.NET、Java、JavaScript、PHP、Python、Ruby中,不但详细介绍了语言中正则表达式的用法,更点明了版本之间的细微差异,既可以作为专门学习的教材,也可以作为有用的参考手册。本书适合经常需要进行文本处理(比如日志分析或网络运维)的技术人员、熟悉常用开发语言的程序员,以及已经对正则表达式有一定了解的读者阅读。
目录
- 第 一 部 分
- 第1章 字符组 2
- 1.1 普通字符组 2
- 1.2 关于Python的基础知识 4
- 1.3 普通字符组(续) 6
- 1.4 元字符与转义 8
- 1.5 排除型字符组 10
- 1.6 字符组简记法 12
- 1.7 字符组运算 14
- 1.8 POSIX字符组 15
- 第2章 量词 17
- 2.1 一般形式 17
- 2.2 常用量词 18
- 2.3 数据提取 21
- 2.4 点号 23
- 2.5 滥用点号的问题 23
- 2.6 忽略优先量词 26
- 2.7 转义 31
- 第3章 括号 33
- 3.1 分组 33
- 3.2 多选结构 39
- 3.3 引用分组 44
- 3.3.1 反向引用 48
- 3.3.2 各种引用的记法 50
- 3.3.3 命名分组 53
- 3.4 非捕获分组 54
- 3.5 补充 55
- 3.5.1 转义 55
- 3.5.2 URL Rewrite 56
- 3.5.3 一个例子 58
- 第4章 断言 59
- 4.1 单词边界 59
- 4.2 行起始/结束位置 61
- 4.3 环视 68
- 4.4 补充 74
- 4.4.1 环视的价值 74
- 4.4.2 环视与分组编号 74
- 4.4.3 环视的支持程度 75
- 4.4.4 环视的组合 77
- 4.4.5 断言和反向引用之间的关系 79
- 第5章 匹配模式 81
- 5.1 不区分大小写模式 81
- 5.1.1 模式的指定方式 82
- 5.2 单行模式 84
- 5.3 多行模式 85
- 5.4 注释模式 87
- 5.5 补充 88
- 5.5.1 更多的模式 88
- 5.5.2 修饰符的作用范围 89
- 5.5.3 失效修饰符 90
- 5.5.4 模式与反向引用 90
- 5.5.5 冲突策略 91
- 5.5.6 哪种方式更好 92
- 第6章 其他 93
- 6.1 转义 93
- 6.1.1 字符串转义与正则转义 93
- 6.1.2 元字符的转义 97
- 6.1.3 彻底消除元字符的特殊含义 99
- 6.1.4 字符组中的转义 101
- 6.2 正则表达式的处理形式 101
- 6.2.1 函数式处理 102
- 6.2.2 面向对象式处理 102
- 6.2.3 比较 103
- 6.2.4 线程安全性 104
- 6.3 表达式中的优先级 106第 二 部 分
- 第7章 Unicode 110
- 7.1 关于编码 110
- 7.2 推荐使用Unicode编码 111
- 7.3 Unicode匹配规则 115
- 7.4 单词边界 117
- 7.5 码值 119
- 7.6 Unicode属性 121
- 7.6.1 Unicode Property 121
- 7.6.2 Unicode Block 122
- 7.6.3 Unicode Script 123
- 7.7 Unicode属性列表 123
- 7.7.1 Unicode Property 123
- 7.7.2 Unicode Block 125
- 7.7.3 Unicode Script 128
- 7.8 POSIX字符组 129
- 第8章 匹配原理 130
- 8.1 有穷自动机 130
- 8.2 正则表达式的匹配过程 131
- 8.3 回溯 134
- 8.4 NFA和DFA 136
- 第9章 常见问题的解决思路 138
- 9.1 关于元素的三种逻辑 138
- 9.1.1 必须出现 139
- 9.1.2 可能出现 139
- 9.1.3 不能出现 140
- 9.2 正则表达式的常见操作 142
- 9.2.1 提取 142
- 9.2.2 验证 148
- 9.2.3 替换 152
- 9.2.4 切分 157
- 9.3 正则表达式的优化建议 159
- 9.3.1 使用缓存 159
- 9.3.2 尽量准确地表达意图 160
- 9.3.3 避免重复匹配 160
- 9.3.4 独立出文本和锚点 161
- 9.4 别过分依赖正则表达式 162
- 9.4.1 彻底放弃字符串操作 162
- 9.4.2 思维定势 163
- 9.4.3 正则表达式可以匹配各种文本 164第 三 部 分
- 第10章 .NET 168
- 10.1 预备知识 168
- 10.2 正则功能详解 169
- 10.2.1 列表 169
- 10.2.2 字符组 170
- 10.2.3 Unicode属性 170
- 10.2.4 字符组简记法 171
- 10.2.5 单词边界 171
- 10.2.6 行起始/结束位置 172
- 10.2.7 环视 173
- 10.2.8 匹配模式 173
- 10.2.9 捕获分组的引用 174
- 10.3 正则API简介 175
- 10.3.1 Regex 175
- 10.3.2 Match 179
- 10.4 常用操作示例 180
- 10.4.1 验证 180
- 10.4.2 提取 180
- 10.4.3 替换 181
- 10.4.4 切分 182
- 第11章 Java 183
- 11.1 预备知识 183
- 11.2 正则功能详解 184
- 11.2.1 列表 184
- 11.2.2 字符组 184
- 11.2.3 Unicode属性 186
- 11.2.4 字符组简记法 186
- 11.2.5 单词边界 186
- 11.2.6 行起始/结束位置 187
- 11.2.7 环视 188
- 11.2.8 匹配模式 188
- 11.2.9 纯文本模式 189
- 11.2.10 捕获分组的引用 189
- 11.3 正则API简介 189
- 11.3.1 Pattern 190
- 11.3.2 Matcher 192
- 11.3.3 String 194
- 11.4 常用操作示例 195
- 11.4.1 验证 195
- 11.4.2 提取 196
- 11.4.3 替换 196
- 11.4.4 切分 197
- 第12章 JavaScript 198
- 12.1 预备知识 198
- 12.2 正则功能详解 199
- 12.2.1 列表 199
- 12.2.2 字符组 199
- 12.2.3 字符组简记法 200
- 12.2.4 单词边界 200
- 12.2.5 行起始/结束位置 201
- 12.2.6 环视 201
- 12.2.7 匹配模式 202
- 12.2.8 捕获分组的引用 203
- 12.3 正则API简介 203
- 12.3.1 RegExp 203
- 12.3.2 String 207
- 12.4 常用操作示例 210
- 12.4.1 验证 210
- 12.4.2 提取 210
- 12.4.3 替换 211
- 12.4.4 切分 211
- 12.5 关于ActionScript 211
- 12.5.1 RegExp 211
- 12.5.2 匹配规则 212
- 12.5.3 匹配模式 212
- 12.5.4 正则API 212
- 第13章 PHP 213
- 13.1 预备知识 213
- 13.2 正则功能详解 215
- 13.2.1 列表 215
- 13.2.2 字符组 216
- 13.2.3 Unicode属性 217
- 13.2.4 字符组简记法 217
- 13.2.5 单词边界 217
- 13.2.6 行起始/结束位置 218
- 13.2.7 环视 219
- 13.2.8 匹配模式 219
- 13.2.9 纯文本模式 220
- 13.2.10 捕获分组的引用 220
- 13.3 正则API简介 221
- 13.3.1 PREG 常量说明 221
- 13.3.2 preg_quote 222
- 13.3.3 preg_ grep 223
- 13.3.4 preg_match 223
- 13.3.5 preg_match_all 225
- 13.3.6 preg_ last_ error 227
- 13.3.7 preg_replace 227
- 13.3.8 preg_ replace_ callback 227
- 13.3.9 preg_ filter 228
- 13.3.10 preg_ split 229
- 13.4 常见的正则操作举例 230
- 13.4.1 验证 230
- 13.4.2 提取 230
- 13.4.3 替换 231
- 13.4.4 切分 232
- 第14章 Python 233
- 14.1 预备知识 233
- 14.2 正则功能详解 234
- 14.2.1 列表 234
- 14.2.2 字符组 235
- 14.2.3 Unicode属性 236
- 14.2.4 字符组简记法 236
- 14.2.5 单词边界 238
- 14.2.6 行起始/结束位置 239
- 14.2.7 环视 239
- 14.2.8 匹配模式 240
- 14.2.9 捕获分组的引用 240
- 14.3 正则API简介 241
- 14.3.1 RegexObject 241
- 14.3.2 re.compile(regex[, flags]) 243
- 14.3.3 re.search(pattern, string[, flags]) 243
- 14.3.4 MatchObject 243
- 14.3.5 re.match(pattern, string[, flags]) 244
- 14.3.6 re.findall(pattern, sting[, flags]) 245
- 14.3.7 re.finditer(pattern, string[, flags]) 245
- 14.3.8 re.split(pattern, string[, maxsplit=0,flags=0]) 246
- 14.3.9 re.sub(pattern, repl, string[, count,flags]) 247
- 14.4 常用操作示例 248
- 14.4.1 验证 248
- 14.4.2 提取 248
- 14.4.3 替换 249
- 14.4.4 切分 250
- 第15章 Ruby 251
- 15.1 预备知识 251
- 15.2 正则功能详解 252
- 15.2.1 列表 252
- 15.2.2 字符组 252
- 15.2.3 Unicode属性 253
- 15.2.4 字符组简记法 254
- 15.2.5 单词边界 254
- 15.2.6 行起始/结束位置 255
- 15.2.7 环视 256
- 15.2.8 匹配模式 256
- 15.2.9 捕获分组的引用 257
- 15.3 正则API简介 257
- 15.3.1 Regexp 257
- 15.3.2 Regexp.match(text) 259
- 15.3.3 Regexp.quote(text)和Regexp.escape(text) 260
- 15.3.4 String.index(Regexp) 261
- 15.3.5 String.scan(Regexp) 261
- 15.3.6 String.slice(Regexp) 262
- 15.3.7 String.split(Regexp) 262
- 15.3.8 String.sub(Regexp, Str) 263
- 15.3.9 String.gsub(Regexp, String) 264
- 15.4 常用操作示例 264
- 15.4.1 验证 264
- 15.4.2 提取 265
- 15.4.3 替换 265
- 15.4.4 切分 265
- 15.5 Ruby 1.9的新变化 266
- 第16章 Linux/UNIX 268
- 16.1 POSIX 268
- 16.1.1 POSIX规范 268
- 16.1.2 POSIX字符组 269
- 16.2 vi 271
- 16.2.1 字符组及简记法 271
- 16.2.2 量词 272
- 16.2.3 多选结构和捕获分组 272
- 16.2.4 环视 273
- 16.2.5 锚点和单词边界 273
- 16.2.6 替换操作的特殊字符 274
- 16.2.7 replacement中的特殊变量 276
- 16.2.8 补充 276
- 16.3 grep 277
- 16.3.1 基本用法 277
- 16.3.2 字符组 277
- 16.3.3 锚点和单词边界 278
- 16.3.4 量词 278
- 16.3.5 多选结构和捕获分组 279
- 16.3.6 options 279
- 16.3.7 egrep和fgrep 280
- 16.3.8 补充 280
- 16.4 awk 281
- 16.4.1 基本用法 281
- 16.4.2 字符组及简记法 282
- 16.4.3 锚点和单词边界 283
- 16.4.4 量词 283
- 16.4.5 多选结构 284
- 16.4.6 补充 284
- 16.5 sed 284
- 16.5.1 基本用法 284
- 16.5.2 字符组及简记法 285
- 16.5.3 锚点和单词边界 285
- 16.5.4 量词 286
- 16.5.5 多选结构和捕获分组 286
- 16.5.6 options 286
- 16.5.7 补充 287
- 16.6 总结 288
- 附录A 常用语言中正则特性一览 291
- 附录B 常用的正则表达式 293
-
附录C 常用的正则表达式工具及资源 309