第 一 部 分
第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